2011-01-27 65 views
6

我的應用程序使用Rails 2後端,用於託管的Heroku,用於文件上傳的Paperclip和用於文件存儲的Amazon S3。點擊下載文件 - Ruby on Rails

現在用戶可以用paperclip + s3上傳文件 - 這個工作完美無瑕。上傳後,他們的儀表板上會顯示一個圖標,鏈接到文件位置(在s3存儲區中)。點擊圖標後,瀏覽器會在新窗口中打開文件(對於大多數文件類型 - PDF,MP3,img等)。當用戶點擊文件圖標時(例如Gmail附件),我希望文件自動下載。該解決方案應該能夠適用於任何文件類型和跨瀏覽器。

有沒有幫助在軌道中做到這一點,或者需要JavaScript?我真的被困在這一個,所以任何事情指向我在正確的方向將不勝感激。謝謝!

回答

10

請嘗試以下方法:

class Test < ActiveRecord::Base 

    has_attached_file :testfile, 
    :storage => :s3, 
    # All your S3 config 
    :s3_headers => {"Content-Disposition" => "attachment"} 

end 

這應該告訴回形針創業板設置了「內容處置」頭新上傳文件的值「附件」。

請注意,您必須手動編輯已上傳的文件,例如,與Cyber​​duck或其他FTP客戶端。

+1

感謝您的提示!只是供參考,我認爲你在這裏有一個類型。 `{「Content-Disposition」:「attachment」}`拋出一個錯誤,但是`{「Content-Disposition」=>「attachment」}`正常工作。 – aguynamedloren 2011-04-22 09:57:37

2

傳輸文件時,需要設置一個Content-Disposition標頭,其值爲attachment; filename=yourfilename.pdf。如果它直接從S3傳輸,則需要告訴S3設置Content-Disposition標題。可能也是Content-Type

請注意,如果您告訴S3將Content-Disposition標頭關聯起來,它將會始終傳送此標頭

FWIW,這裏是亞馬遜的做一個PUT的對象文件:http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html