我正在使用rails 4开发一个Web应用程序,而我现在面临一个小问题。
我想让网站的用户能够通过点击链接从ftp下载文件。我决定继续这个:
def download
@item=Item.find(params[:id])
@item.dl_count += 1
@item.save
url = @item.file_url.to_s
redirect_to url and return
end
而且,基本上,这在我看来:
<%= link_to 'DL', controller: "items", action: "download"%>
然而,我对此并不十分满意,因为它会产生一些错误,例如单击链接创建两个GET方法,一个响应403 Forbidden,另一个响应302发现......
你对我如何改进这个有什么想法吗?
答案 0 :(得分:1)
在Rails中你应该这样做:
def download
@item=Item.find(params[:id])
@item.dl_count += 1
@item.save
url = @item.file_url.to_s
send_file url, type: 'image/jpeg', disposition: 'inline'
end
查看更多信息http://apidock.com/rails/ActionController/DataStreaming/send_file
请注意,send_file只能从本地文件系统发送。
如果您需要从http://example.com/apps/uploads/tfm.zip获取远程源(应该是安全位置)的文件并避免将此文件存储在服务器内存中,您可以先将文件保存在#{RAILS_ROOT} / tmp /或system / tmp中,然后send_file
data = open(url)
filename = "#{RAILS_ROOT}/tmp/my_temp_file"
File.open(filename, 'w') do |f|
f.write data.read
end
send_file filename, ...options...
如果Rails无法读取文件,则应检查文件权限