Ruby on Rails,强制用户下载 tmp 文件

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)

...在控制器上它只是给了我一条未找到的路线。

干杯。

Jac*_*Chu 5

看一下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)