【发布时间】:2012-11-07 06:03:00
【问题描述】:
我想在我的网页上托管一个包含 mp3 文件的外部 URL。问题是单击该链接将打开播放器,我必须右键单击并“将链接另存为”才能下载文件。有没有办法强制下载文件?
我不想下载文件然后使用标题强制下载。
【问题讨论】:
我想在我的网页上托管一个包含 mp3 文件的外部 URL。问题是单击该链接将打开播放器,我必须右键单击并“将链接另存为”才能下载文件。有没有办法强制下载文件?
我不想下载文件然后使用标题强制下载。
【问题讨论】:
编辑:如果您仅控制目标 MP3 文件而不是外部链接,则以下答案适用
链接不应直接指向 MP3 文件,而应指向一段逻辑(例如,您是否使用 ASPX?在这种情况下,您可以使用 .aspx 页面作为目标,或者您可以创建一个 HTTP 处理程序对于 .mp3 扩展名)添加一个 HTTP 标头到包含以下行的输出:
Content-Disposition: attachment;filename="whatever.mp3";
这将指示浏览器将输出的内容作为文件保存在本地。
【讨论】:
现在HTML5 spec 在超链接上定义了一个非常有用的download 属性,基本上允许在客户端强制下载行为,而不管来自服务器的Content-Type 和Content-Disposition 是什么:
在某些情况下,资源旨在供以后使用,而不是 立即观看。表示资源旨在 下载以供以后使用,而不是立即使用,
download属性可以在a或area元素上指定hyperlink到该资源。
<...>
download属性(如果存在)表明作者打算 用于下载资源的超链接。该属性可能 有价值;该值(如果有)指定默认文件名 作者推荐用于标记本地文件中的资源 系统。
所以你需要做的就是将属性添加到你的超链接中,支持它的浏览器会理解需要下载内容:
<a href="http://example.com/media.mp3" download>Download Your File</a>
您甚至可以通过设置属性值来为下载的文件建议一个不同的名称:
<a href="http://example.com/media.mp3" download="check this out.mp3">Download Your File</a>
更多信息和演示:
浏览器支持:caniuse.com
下载生成的内容
您甚至可以创建一个链接来下载您生成的内容,只要有办法为其获取 base64 编码的数据 URI:
<a href="data:application/octet-stream;base64,YOUR_ENCODED_DATA" download="song.mp3">Download</a>
有关保存生成内容的更多详细信息,请参阅 Eli Grey 的这篇文章:
【讨论】: