点击下载文件 - Ruby on Rails

时间:2011-01-27 00:50:26

标签: ruby-on-rails download paperclip attachment

我的应用程序使用Rails 2后端,Heroku用于托管,Paperclip用于文件上传,Amazon S3用于文件存储。

现在用户可以使用paperclip + s3上传文件 - 这完美无瑕。上传后,其仪表板上会出现一个图标,链接到文件位置(在s3存储桶中)。单击该图标时,浏览器将在新窗口中打开该文件(对于大多数文件类型 - PDF,MP3,img等)。我想要在用户点击文件图标(如Gmail附件)时自动下载文件,而不是打开。该解决方案应该能够适用于任何文件类型和跨浏览器。

是否有帮助在rails中执行此操作,或者是否需要javascript?我真的被困在这个上,所以任何指向正确方向的东西都会非常感激。谢谢!

2 个答案:

答案 0 :(得分:10)

请尝试以下方法:

class Test < ActiveRecord::Base

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

end

这应该告诉Paperclip Gem将“Content-Disposition”标题设置为新上传文件的值“attachment”。

请注意,您必须手动编辑已上传的文件,例如使用Cyber​​duck或其他FTP客户端。

答案 1 :(得分: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