2010-03-08 2 views
3

파일 다운로드 구현에 대한 의문점이 있습니다. 나는 파일을 업로드하기 위해 Amazon S3와 함께 attachment_fu를 사용하는 응용 프로그램을 만들고 있습니다. 업로드 측면에서 상황이 꽤 잘 작동하고 있습니다. 이제는 파일 다운로드를 시작할 시간입니다. 여기 내가 로그인 한 사용자 검색과 이미지 탐색을 위해 필요한 것은 무엇인지, 그리고 파일을 다운로드 바구니에 추가 할 수 있어야합니다 (다운로드 장바구니를 보자). 마지막으로 사용자는 S3에서 이러한 파일을 압축 파일로 다운로드 할 수 있어야합니다.Ruby on rails : 인증/권한/시간 초과로 이미지 다운로드

내가 사용할 수있는 플러그인/보석이 있습니까?

답변

3

고객에게 모든 파일의 zip 파일을 제공하는 단점은 S3의 모든 파일을 먼저 서버로 끌어 와서 압축해야한다는 것입니다.

원한다면 확실히 할 수 있지만 시간이 좀 걸릴 것입니다. 이 아닙니다.은 브라우저 요청의 일부로 동 기적으로 수행하려고합니다. 대신 delayed_job 또는 유사한 것을 사용하여 백그라운드 작업으로 수행하십시오.

http://ruby-doc.org/core/classes/Zlib/GzipWriter.html를 참조 GzipWriter :: Zlib의를 사용, 실제을 압축을 수행하려면 - 당신이 다음 수 표준 루비

의 일부

입니다 :

  1. 이메일 사용자가 첨부 파일
  2. 로 실제 zip 파일
  3. 서버
  4. 에 사용자에게 zip 파일에 대한 링크를 이메일 또는 S3하는 zip 파일을 업로드 한 다음 S3에 zip 파일에 대한 링크를 이메일로 보내

대신,

대안이 함께 파일을 압축하지 않는 것입니다 ... 당신의 시스템에서 기존의 zip 파일을 제거 할 사용자에게 파일을 다운로드 할 하나 개 이상의 링크를 제공하기 위해 정리 작업/작업을 생성하는 것을 잊지 마십시오 갈라져.

S3를 사용하면 일정 기간 동안 사용할 수있는 S3 파일에 대한 URL을 만들 수 있습니다. (파일이 그래서에 바로 링크가 작동하지 않습니다 S3에 개인 될 것입니다.) 여기에 첨부-FU와 AWS-S3 보석을 사용하여 만드는 방법은 다음과 같습니다

래리 KI가을 압축을 이해
# I added this as a method to my model for the files stored in S3 
def authenticated_s3_url 
    # return a publicly usable url 
    connect_to_aws # a local method which connects/re-connects to s3 
    S3Object.url_for(full_filename, 
      bucket_name, 
      :expires_in => 60 * 60) # 1 hour 
end 
+0

감사는이 아니다 좋은 아이디어와 최상의 메커니즘은 파일에 대한 직접 링크를 제공합니다. 어쨌든 이렇게하면 S3에 압축 파일을 업로드하지 않으면 사용자가 한 번에 파일 일괄 다운로드 할 수 없습니다. 아직 S3에 익숙하지는 않았으므로 먼저 직접 링크를 시도해 보겠습니다. 내가 여기에 필요한 것은 "Signed URL"맞지? – randika

+0

공개 액세스 권한이없는 S3에 파일을 저장하는 경우 예를 들어, 서명 된 URL을 제공하여 사용자가 파일을 다운로드 할 수있게해야합니다. 또한 파일 압축은 좋은 생각입니다. 특히 대부분의 고객이 3 개 이상의 파일을받는 경우에 적합합니다. 3 개 파일 아래에서 zip 아카이브의 압축을 해제하는 것은 아마도 가치가 없습니다. ps. 당신에게 도움이되는 오버플로 응답 스택에 크레딧을 제공하는 것을 잊지 마십시오. –