0

/ publicフォルダーにmp3ファイルを追加しましたが、少し問題がありました。

私の見解では、リンクを追加しました:

= link_to "Interview 1", "/interview_01.mp3"

ページからリンクを見ると、クリックするまですべてが正常に表示されます。ブラウザが1分以上オンになり、タイルが「未定義」に変わり、GoogleChromeがフリーズします。

どうしたの?どうすればファイルをダウンロードできるようにできますか?

4

1 に答える 1

5

編集:誰かが私に反対票を投じたので、私の答えのより多くの文脈

mp3 ファイルにリンクすると、最新のブラウザのほとんどは、そのファイルをブラウザで直接再生しようとします。ファイルの再生を開始するためにブラウザが使用しているプラ​​グインが壊れているため、ブラウザがフリーズしている可能性があります。私の推測では、Windows を実行していて、quicktime プラグインなどを使用しようとしていると思われます。

ブラウザーにファイルを再生させたくないが、実際にファイルのダウンロードを開始させたい場合は、HTTP 応答にヘッダーをいくつか追加する必要があります。最も重要なことは次のとおりです。

Content-Disposition: attachment; filename="filenamehere.mp3"

私の元の答えは、これを達成するための指示を提供します。これがあなたが達成したいと望んでいたものでない場合は、無視してかまいません。

新しい HTML5 オーディオ タグを使用してファイルをページに直接埋め込む場合は、@Alen による質問へのコメントに記載されているアドバイスに従うことができます。

元の答え:

#send_fileコントローラー ヘルパー メソッドを使用して、コントローラー アクションからファイルを送信してみてください。

= link_to "Inteview 1", :controller => 'files', :action => 'send_file', :filename => 'interview_01.mp3'

それで

class FilesController

  def send_file
    file_path = "#{Rails.root}/public/#{params[:filename]}"
    send_file file_path, :filename => params[:filename], :disposition => 'attachment'
  end

end

レファレンス API: http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_file

このsend_fileメソッドは、HTTP ヘッダーを正しく設定して、ファイルをレンダリングするのではなくダウンロードするようにブラウザに指示します。

于 2013-02-14T00:06:00.273 に答える