强制外部下载网址

问题描述 投票:0回答:3

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

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

html header download
3个回答
19
投票

现在 HTML5 规范在超链接上定义了一个非常有用的

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 的这篇文章:

在客户端保存生成的文件


3
投票

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

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

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

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


2
投票

这对我使用 JavaScript 有用

<a onclick="saveFile('https://<your-external-url>')">Download</a>

<script>
    function saveFile(url) {
    // Get file name from url.
    var filename = url.substring(url.lastIndexOf("/") + 1).split("?")[0];
    var xhr = new XMLHttpRequest();
    xhr.responseType = 'blob';
    xhr.onload = function() {
        var a = document.createElement('a');
        a.href = window.URL.createObjectURL(xhr.response); // xhr.response is a blob
        a.download = filename; // Set the file name.
        a.style.display = 'none';
        document.body.appendChild(a);
        a.click();
        delete a;
    };
    xhr.open('GET', url);
    xhr.send();
    }
</script>

点击

<a>
标签将直接下载您的文件

© www.soinside.com 2019 - 2024. All rights reserved.