【发布时间】:2016-12-06 08:35:46
【问题描述】:
我有一个锚链接
<a href="http://bucket_name.amazonaws.com/uploads/users/4/songs/7/test.mp3">Download</a>
如何做到这一点,当用户点击它时,它实际上会打开一个弹出窗口,要求用户保存文件而不是尝试在浏览器上播放文件?
编辑:
我正在阅读这个article。
def download
data = open(Song.first.attachment)
send_data data.read, :type => data.content_type, :x_sendfile=>true
end
文章建议使用 x_sendfile,因为 send_file 占用一个 http 进程,在下载完成之前可能会挂起应用程序。
其次,我使用的是 send_data 而不是 send_file,如果文件是远程的(即托管在 Amazon S3 上),这似乎可以工作。正如article所建议的那样。
我提到的那篇文章发表于 2009 年。x_sendfile=>true 还需要吗?如果不包含它会挂起应用程序吗?
我真的应该使用 send_data 还是 send_file?
【问题讨论】:
-
很好的解决方案,谢谢。我必须做的唯一改变是你使用 data = open(Song.first.attachment_url),否则我会得到一个错误:'can't convert Paperclip::Attachment into String'。
标签: ruby-on-rails