【问题标题】:Rails 4, asset pipeline causes user downloadable files to be downloaded twiceRails 4,资产管道导致用户可下载文件被下载两次
【发布时间】:2013-07-04 14:48:17
【问题描述】:

我的应用程序目录中有一个名为“uploads”的文件夹,用户可以在其中上传文件和下载文件。我不希望上传文件夹位于公共目录中,因为我想控制下载授权。

在我的控制器中,我有:

send_file Rails.root.join('app', 'uploads', filename), :type => 'application/zip', :disposition => 'inline', :x_sendfile=>true

这实际上工作正常。问题是当我在生产服务器上时,当我运行 rake assets:precompile 并有一个 assets 目录时,文件会下载两次。第一次下载文件时,浏览器就像什么都没有发生一样(没有加载旋转),但我看到数据正在 Google Chrome 网络开发人员的网络选项卡中传输。然后在下载文件后,会出现一个提示,询问用户是否要下载文件。

删除公共目录中的资产文件夹可以解决这个问题,但我想使用资产管道。我还尝试将资产管道需求从 require_tree 更改为 require_directory。

有谁知道如何让 send_file 与资产管道正常工作?

谢谢。

【问题讨论】:

  • 看起来是 Turbolinks 导致了这个问题。我可以看到 javascript 中的这个函数被调用:visit = function(url) { if (browserSupportsPushState && browserIsntBuggy) { cacheCurrentPage(); reflectNewUrl(url); return fetchReplacement(url); } else { return document.location.href = url; } }; 这导致文件被下载两次。现在的问题是……我怎样才能为一种方法禁用 turbolinks?
  • 对于任何有这个问题的人,我都解决了。将 'data-no-turbolink' => true 传递给 link_to 帮助程序,以阻止 Turbolinks 干扰下载。

标签: ruby-on-rails ruby-on-rails-4 sendfile


【解决方案1】:

对于遇到此问题的任何人,我都解决了。通过

'data-no-turbolink' => true 

进入 link_to 帮助程序以阻止 Turbolinks 干扰下载。

https://github.com/rails/turbolinks/issues/182

【讨论】:

  • 更改为'data-turbolinks' => false
【解决方案2】:

但是,如果您使用带有turbooboost = true 的表单,而不是link_to,或者甚至使用link_to,您可以这样做:

在你的controller里面,在你的action里面放:

def download
      respond_to do |format|
        format.html do
          data = "Hello World!"
          filename = "Your_filename.docx"
          send_data(data, type: 'application/docx', filename: filename)
        end
        format.js { render js: "window.location.href = '#{controller_download_path(params)}';" }
      end
  end

controller_download_path 替换为download 操作的路径,

并将postget 放置在您的路线 中,以获得相同的路径:

post '/download'  => 'your_controller#download',  as: :controller_download
get '/download'  => 'your_controller#download',  as: :controller_download

【讨论】:

    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多