2

所以我有一个约 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 秒左右才能显示下载对话框。有什么问题?我只希望用户能够单击“下载”并下载。

4

2 回答 2

0

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

我不确定您的x_sendfile代码,因此您应该先尝试一下。

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

也尝试使用redirect_to该资源。

于 2013-11-15T04:24:42.440 回答
0

这些文件是公开的,并且控制器中没有明显的逻辑需要使用它......为什么不直接链接到文件,以便网络服务器可以处理它,而不是像这样通过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>
于 2013-11-15T04:08:24.703 回答