0

我将 mp3 文件添加到 /public 文件夹中,但发现了一些问题。

在我看来,我添加了链接:

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

当我从页面上看到链接时,一切看起来都很正常,直到我点击它。浏览器挂起一分钟或更长时间,磁贴变为“未定义”,我的谷歌浏览器冻结。

它出什么问题了?我怎样才能使人们可以下载文件?

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

参考 Rails Api:http ://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_file

send_file方法正确设置 HTTP 标头以告诉浏览器下载文件而不是尝试呈现它。

于 2013-02-14T00:06:00.273 回答