2011-01-27 66 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