我在tmp目录中创建了一个文件,其中包含以下控制器代码: def download file_path = "#{RAILS_ROOT}/tmp/downloads/xxx.html" data = render_to_string( :action = :show, :layout = nil ) File.open(file_path, "w"){|f| f data } fl
def download file_path = "#{RAILS_ROOT}/tmp/downloads/xxx.html" data = render_to_string( :action => :show, :layout => nil ) File.open(file_path, "w"){|f| f << data } flash[:notice] = "saved to #{file_path}" end
这会在tmp目录中创建我想要的文件,我想要做的就是强制用户下载该文件.
在我的本地计算机上,文件保存到以下路径:
/Users/xxxx/Documents/Sites/xxxx/Website/htdocs/tmp/downloads/xxxx.html
在实时服务器上,这个网址将是完全不同的东西.
我想知道的是如何强迫用户下载这个xxxx.html?
附:
如果我把…
redirect_to file_path
…在控制器上它只是给我一条未找到的路线.
干杯.
看看 send_file方法.它看起来像这样:send_file Rails.root.join('tmp', 'downloads', 'xxxxx.html'), :type => 'text/html', :disposition => 'attachment'
:disposition => ‘attachment’将强制浏览器下载文件而不是渲染文件.如果要在浏览器中加载,请将其设置为“内联”.如果nginx在你的Rails应用程序前面,那么你将不得不修改你的环境配置(即.environment / production.rb):
# For nginx: config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'