【问题标题】:Force external download url强制外部下载 url
【发布时间】:2012-11-07 06:03:00
【问题描述】:

我想在我的网页上托管一个包含 mp3 文件的外部 URL。问题是单击该链接将打开播放器,我必须右键单击并“将链接另存为”才能下载文件。有没有办法强制下载文件?

我不想下载文件然后使用标题强制下载。

【问题讨论】:

    标签: html header download


    【解决方案1】:

    编辑:如果您仅控制目标 MP3 文件而不是外部链接,则以下答案适用

    链接不应直接指向 MP3 文件,而应指向一段逻辑(例如,您是否使用 ASPX?在这种情况下,您可以使用 .aspx 页面作为目标,或者您可以创建一个 HTTP 处理程序对于 .mp3 扩展名)添加一个 HTTP 标头到包含以下行的输出:

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

    这将指示浏览器将输出的内容作为文件保存在本地。

    【讨论】:

    • 它的外部网址,我无法更改该文件的标题。
    • 如果是外部的,我认为你无能为力。
    • 我已经在问题中指定了这一点。还是谢谢
    • 那么这就是你的答案:它是一个外部链接,不受你的控制。不幸的是,您无能为力。
    【解决方案2】:

    现在HTML5 spec 在超链接上定义了一个非常有用的download 属性,基本上允许在客户端强制下载行为,而不管来自服务器的Content-TypeContent-Disposition 是什么:

    在某些情况下,资源旨在供以后使用,而不是 立即观看。表示资源旨在 下载以供以后使用,而不是立即使用,download 属性可以在 aarea 元素上指定 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 的这篇文章:

    Saving generated files on the client-side

    【讨论】:

    • 如果用户加载页面后生成了mp3怎么办?如果您创建一个“假”锚标记并 jquery '单击'它,它不起作用......我将如何完成相同的操作并使用 JS 强制下载?可能不可能?
    • @trainoasis 如果您可以获得生成的 mp3 的数据 URI(我相信您可以),则可以生成链接。查看我的更新答案
    • 请注意,这仅适用于同源 URL:developer.mozilla.org/en-US/docs/Web/HTML/Element/a
    猜你喜欢
    • 2019-12-03
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2012-03-03
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多