【问题标题】:Download file on click - Ruby on Rails点击下载文件 - Ruby on Rails
【发布时间】:2011-01-27 00:50:25
【问题描述】:

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

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

是否有帮助程序在 Rails 中执行此操作,或者是否需要 javascript?我真的坚持这一点,所以任何能指出我正确方向的东西都将不胜感激。谢谢!

【问题讨论】:

    标签: ruby-on-rails download paperclip attachment


    【解决方案1】:

    请尝试以下方法:

    class Test < ActiveRecord::Base
    
      has_attached_file :testfile, 
        :storage => :s3,
        # All your S3 config
        :s3_headers => {"Content-Disposition" => "attachment"}
    
    end
    

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

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

    【讨论】:

    • 感谢您的提示!仅供参考,我认为您在这里有一种类型。 {"Content-Disposition": "attachment"} 抛出错误,但 {"Content-Disposition"=&gt; "attachment"} 工作正常。
    • {"Content-Disposition": "attachment"} 仅适用于 Ruby 1.9。如果您仍在使用 1.8,请使用 {"Content-Disposition"=&gt; "attachment"}。
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多