强制外部下载 url

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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>

更多信息和演示:

Downloading resources in HTML5: a[download](HTML5 摇滚) HTML5 download Attribute(大卫沃尔什)

浏览器支持: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

以上是关于强制外部下载 url的主要内容,如果未能解决你的问题,请参考以下文章

强制在 InAppBrowser 中完全打开所有外部链接

使用spring boot从外部url下载文件

来自外部 url 的 wordpress 特色图片,无需下载

从外部 URL 下载图像,使用 JavaScript 和 ExpressJs 保存在服务器上 [重复]

华为怎么强制安装无证书软件

如果传递参数,则从脚本外部强制变量值