Min*_*ure 4 redirect ruby-on-rails file download tmp
我使用以下控制器代码在 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 }
flash[:notice] = "saved to #{file_path}"
end
Run Code Online (Sandbox Code Playgroud)
这会在 tmp 目录中创建我想要的文件,我想要做的是强制用户下载该文件。
在我的本地计算机上,该文件保存到如下路径:
/Users/xxxx/Documents/Sites/xxxx/Website/htdocs/tmp/downloads/xxxx.html
Run Code Online (Sandbox Code Playgroud)
在实时服务器上,这个 url 会完全不同。
我想知道如何强制用户下载这个 xxxx.html ?
PS如果我放一个...
redirect_to file_path
Run Code Online (Sandbox Code Playgroud)
...在控制器上它只是给了我一条未找到的路线。
干杯。
看一下send_file方法。它看起来像这样:
send_file Rails.root.join('tmp', 'downloads', 'xxxxx.html'), :type => 'text/html', :disposition => 'attachment'
Run Code Online (Sandbox Code Playgroud)
:disposition => 'attachment' 将强制浏览器下载文件而不是渲染它。如果您希望它在浏览器中加载,请将其设置为“内联”。如果 nginx 位于您的 Rails 应用程序之前,那么您将必须修改您的环境配置(即environments/Production.rb):
# For nginx:
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
Run Code Online (Sandbox Code Playgroud)