【问题标题】:Setting Content-Disposition to attachment using Ruby on Rails and Paperclip使用 Ruby on Rails 和 Paperclip 将 Content-Disposition 设置为附件
【发布时间】:2012-08-03 04:17:20
【问题描述】:
我有一个(希望很小)的问题。
我正在使用 Ruby on Rails 和 Paperclip 来处理文件上传。
现在我想自动将 Content-Disposition 标头设置为“附件”,以便当用户单击链接时,文件被下载而不是直接显示在浏览器中。
我为 Amazon S3 找到了以下解决方案:
Download file on click - Ruby on Rails
但我不使用 S3。
有人可以帮忙吗?
提前致谢,
/拉斯
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
paperclip
【解决方案1】:
根据this link,您可以执行以下操作:
<Files *.xls> ForceType application/octet-stream Header set Content-Disposition attachment </Files>
<Files *.eps> ForceType application/octet-stream Header set Content-Disposition attachment </Files>
【解决方案2】:
如果您使用文件存储,Paperclip 将文件存储在RAILS_ROOT/public/system 文件夹中(configurable 使用:path 选项)。
/public 文件夹中的文件直接作为静态文件提供。 “Rails/Rack 永远不会看到对您的公用文件夹的请求”(quote cwninja)。
/public 文件夹中的文件由运行此应用程序的网络服务器(例如开发中的 Apache 或 WEBrick)提供服务。网络服务器负责在提供文件时设置标头。所以你应该配置网络服务器来为你的附件设置正确的标题。
另一种选择是构建一个控制器或一些 Rack 中间件来为您的回形针附件提供服务。在那里你可以做类似response.headers['Content-Disposition'] = 'attachment'的事情。
第三种选择是使用 S3,然后您可以在 S3 对象中存储标头(如 Content-Disposition)。然后 S3 使用这些标题提供回形针附件。