这很难解释,所以我会尽力而为,如果人们需要更多信息,希望编辑问题。我没有提供确切的代码,只是一个问题的例子。
我正在使用rails 2.3.8。我在Unix上。
我在Apache无法访问的目录下有一堆文件。 (即/data/files/file.rpk)
我认为我有以下内容。
link_to "RPK File", :controller => 'mycontroller', :action=> 'myaction', :file => '/data/files/file.rpk'
我的控制器中有以下内容。
def myaction
if FileTest.exists?(params[:file])
render :file => params[:file]
end
end
当我选择页面上的链接时,我会得到所需文件的下载提示,但文件名是“myaction”而不是文件名。
如何才能正确命名?
答案 0 :(得分:8)
您希望将send_data
与:filename
选项一起使用。请参阅API documentation。
尽管如此,你想要非常小心。永远不要相信客户/用户!他们将发送file=../../../../etc/group
或其他内容以便读取您系统上的任意文件,因此请务必在将该值传递给任何文件读取方法之前对其进行清理。
答案 1 :(得分:8)
听起来像send_file的工作。 x_sendfile选项可防止您的工作人员在传输实际文件时保持忙碌状态。您可以在this blogpost中了解更多相关信息。
send_file path_to_file_on_filesystem, :type => "application/zip", :x_sendfile => true