如何从rails应用程序下载文件

bde*_*vic 20 ruby-on-rails view download

我似乎无法在任何地方找到这个问题的简单明确的答案!一切似乎都已过时或不完整!

我只是希望用户能够点击链接或按钮并下载文件(即公共文件夹中的某个位置)

我试过这个:

#view
<%= link_to "Raw blast output" ,:action => :download, :file_name => "public/data/02_blastout/#{@bl_file}" %>
#controller
def download
    send_file "#{RAILS_ROOT}/#{params[:file_name]}"
end
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

No route matches {:action=>"download", :file_name=>"public/data/02_blastout/input0.fa_x_Glyma1aaunq.bl", :controller=>"cvits"}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!!

Mar*_*rio 41

不要send_file与用户设置的参数一起使用.这会打开一个巨大的安全漏洞,允许用户访问应用程序可读的任何文件(即整个应用程序,也可能是文件系统上的其他文件).

相反,如果文件处于公共状态,则链接到文件本身.在你的情况下:

<%= link_to "Raw blast output", "/data/02_blastout/#{@bl_file}" %>
Run Code Online (Sandbox Code Playgroud)

无需特殊的控制器操作.

  • 下载是否会锁定rails进程?不应该由http服务器(apache等)处理下载,如:http://www.therailsway.com/2009/2/22/file-downloads-done-right/ (2认同)
  • 如果你设置了apache或其他服务器,它应该处理它.这只是链接的代码. (2认同)