rails如何使用正确的文件名呈现文件

Kir*_*rby 4 ruby-on-rails

这很难解释,所以我会尽我所能,并希望编辑问题,如果人们需要更多的信息.我没有提供确切的代码,只是一个问题的例子.

我正在使用rails 2.3.8.我在Unix上.

我在Apache无法访问的目录下有一堆文件.(即/data/files/file.rpk)

我认为我有以下几点.

link_to "RPK File", :controller => 'mycontroller', :action=> 'myaction', :file => '/data/files/file.rpk' 
Run Code Online (Sandbox Code Playgroud)

我的控制器中有以下内容.

def myaction
  if FileTest.exists?(params[:file])
    render :file => params[:file]  
  end
end
Run Code Online (Sandbox Code Playgroud)

当我选择页面上的链接时,我得到了我所需文件的下载提示,但文件名是"myaction"而不是文件名.

关于如何正确命名的想法?

Bri*_*van 8

您想要使用send_data:filename选项.请参阅API文档.

不过,你想要非常小心.永远不要相信客户/用户!他们会发送file=../../../../etc/group或者某些东西来读取系统上的任意文件,因此在将其传递给任何文件读取方法之前,请务必清理该值.


Bjo*_*orn 8

听起来像send_file的工作.x_sendfile选项可防止您的工作人员在传输实际文件时保持忙碌状态.您可以在此博文中了解更多相关信息.

send_file path_to_file_on_filesystem, :type => "application/zip", :x_sendfile => true
Run Code Online (Sandbox Code Playgroud)