【问题标题】:Ruby on Rails' send_file takes forever for download dialog box to displayRuby on Rails 的 send_file 需要永远显示下载对话框
【发布时间】:2013-11-15 12:24:42
【问题描述】:

所以我有一个约 40MB 的 .wav 文件,用户只需单击一个按钮即可下载该文件。标记如下所示:

            <div class="row">
                <div class="col-md-6">
                    <%= link_to "Download Single", download_song_path, class: "btn btn-default btn-custom" %>
                </div>
                <div class="col-md-6">
                    <%= link_to "Download Artwork", download_artwork_path, class: "btn btn-default btn-custom" %>
                </div>
            </div>

控制器是这样的:

class WelcomeController < ApplicationController
    def index
    end

  def download_song
    send_file "#{Rails.root}/public/white-flame.wav", :x_sendfile => true, :type=>"audio/wav", :filename => "white-flame.wav"
  end

  def download_artwork
    send_file "#{Rails.root}/public/white-flame-artwork.jpg", :x_sendfile => true, :type=>"image/jpg", :filename => "white-flame.jpg"
  end
end

艺术作品下载工作正常,它只有约 2MB 的文件,但 .wav 文件实际上需要 20 秒左右才能显示下载对话框。有什么问题?我只是希望用户能够点击“下载”并下载。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    文件是公开的,控制器中没有明显的逻辑需要使用它...为什么不直接链接到文件,这样网络服务器就可以处理它,而不是像这样通过rails来回往返?

            <div class="row">
                <div class="col-md-6">
                    <%= link_to "Download Single", 'white-flame.wav', class: "btn btn-default btn-custom" %>
                </div>
                <div class="col-md-6">
                    <%= link_to "Download Artwork", 'white-flame-artwork.jpg', class: "btn btn-default btn-custom" %>
                </div>
            </div>
    

    【讨论】:

    • 这只是开始播放曲目或显示图像,不提示下载。
    • 那么我该如何在heroku上设置呢?
    • 我个人没有在 Heroku 中使用过自定义的 htaccess 文件,但似乎确实支持...
    【解决方案2】:

    您必须配置您的服务器以将其类型设置为application/octet-stream,否则浏览器将尝试处理它。

    我不确定您的 x_sendfile 代码,所以您应该先尝试不使用它。

    您检查过您的应用程序日志吗? log/development.log 包含有用的信息。

    也可以尝试使用redirect_to 资源。

    【讨论】:

    • 这是托管在 Heroku 上的,有没有办法在那里设置它?
    • 试试这个:send_file("...", type: 'application/octet-stream')
    • :( 不一样的问题,下载框打开需要很长时间(比如 30 秒到一分钟)
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2014-01-05
    • 2023-04-08
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多