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

アートワークのダウンロードは正常に機能します。ファイルはわずか 2 MB ですが、ダウンロード ダイアログが表示されるまでに .wav ファイルが文字通り 20 秒ほどかかります。問題は何ですか?ユーザーが「ダウンロード」をクリックしてダウンロードできるようにしたいだけです。

4

2 に答える 2

0

ファイルはパブリックであり、コントローラーにはその使用を必要とする明確なロジックはありません...ファイルに直接リンクしないのはなぜですか?そのようにレールを往復する代わりに、Webサーバーがファイルを処理できるようにしますか?

        <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 に答える
0

タイプを as に設定するようにサーバーを構成する必要があります。そうしapplication/octet-streamないと、ブラウザーがそれを処理しようとします。

あなたのx_sendfileコードがよくわからないので、まずそれなしで試してみてください。

アプリケーション ログを確認しましたか? log/development.log有用な情報が含まれています。

またredirect_to、代わりにリソースを使用してみてください。

于 2013-11-15T04:24:42.440 に答える