如何为mp3文件制作下载属性?

How to make a download attribute for an mp3 file?

我一直在尝试下载 link 一个 mp3 文件,但我似乎无能为力。 mp3 文件位于正确的位置,但是当我单击它时,它只是在播放音频文件的新选项卡中打开。文件位置是这样的:

<a href="forsongstab/tracks/Villagers of Ioannina City - Age of Aquarius - 01 Welcome.mp3" download="Villagers of Ioannina City - Age of Aquarius - 01 Welcome"><img class="dli" src="../images/downloadicon.jpeg">01. Welcome</a>

如果有人能找到解决方法,请告诉我。谢谢!

您需要将此 HTTP header 添加到您的响应中以使浏览器强制下载:

Content-Disposition: attachment; filename=your_filename.mp3

例如,如果您在服务器端使用 PHP,您可以创建一个脚本来发送上述 header 后跟实际文件内容:

$path = $_GET['path'];
header('Content-Disposition: attachment; filename=' . basename($path));
readfile($path);

如果您调用此脚本 download.php,则链接到 download.php?path=/path/to/your/file.mp3 将使浏览器 pop-up 成为 file.mp3 的下载对话框.

仅使用 javascript 的解决方案:

function downloadBlob(blob, filename) {
  var a = document.createElement('a');
  a.download = filename;
  a.href = blob;
  document.body.appendChild(a);
  a.click();
  a.remove();
}

function downloadResource(url) {
  filename = url.split('\').pop().split('/').pop();
  fetch(url, {
      mode: 'no-cors'
    })
    .then(response => response.blob())
    .then(blob => {
      let blobUrl = window.URL.createObjectURL(blob);
      downloadBlob(blobUrl, filename);
    })
    .catch(e => console.error(e));
}
<a href="#" onClick="javascript:downloadResource('https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3')">01. Welcome</a>

.then(response => response.blob()) 缺少 return