当前位置:  开发笔记 > 后端 > 正文

Rails 3 - 公用文件夹中的MP3文件

如何解决《Rails3-公用文件夹中的MP3文件》经验,为你挑选了1个好方法。

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

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

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

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

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



1> Dan Knox..:

编辑:我的答案的更多背景,因为有人下来投票给我

当您链接到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标头以告知浏览器下载文件而不是尝试呈现它.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有