Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数强制从URL下载MP3文件,但下载后MP3文件仅在VLC播放器上无法在我的计算机上播放?为什么?_Javascript_Html_Mp3 - Fatal编程技术网

Javascript函数强制从URL下载MP3文件,但下载后MP3文件仅在VLC播放器上无法在我的计算机上播放?为什么?

Javascript函数强制从URL下载MP3文件,但下载后MP3文件仅在VLC播放器上无法在我的计算机上播放?为什么?,javascript,html,mp3,Javascript,Html,Mp3,我有一个Javascript函数,只要提供文件的URL和名称,就可以强制下载文件。这个函数工作得非常好,我从HTML标记/超链接中调用它。但一旦我的功能下载了MP3文件,它就不会在我的电脑上播放了。我已经设计了这个功能,用户可以下载不同的MP3和WAV文件后,点击该文件的相关链接。我只能在媒体播放器VLC上播放下载的MP3文件,它不会在我的笔记本电脑上播放。我的功能在下载过程中是否对MP3文件做了什么,或者为什么下载后它不会播放 我已经研究了MP3文件的变化和编码,但我不确定到底要找什么,或者我

我有一个Javascript函数,只要提供文件的URL和名称,就可以强制下载文件。这个函数工作得非常好,我从HTML标记/超链接中调用它。但一旦我的功能下载了MP3文件,它就不会在我的电脑上播放了。我已经设计了这个功能,用户可以下载不同的MP3和WAV文件后,点击该文件的相关链接。我只能在媒体播放器VLC上播放下载的MP3文件,它不会在我的笔记本电脑上播放。我的功能在下载过程中是否对MP3文件做了什么,或者为什么下载后它不会播放

我已经研究了MP3文件的变化和编码,但我不确定到底要找什么,或者我做错了什么。当我从其他网站下载MP3文件时,它们工作正常,可以直接播放

功能:

<script>// <![CDATA[
function downloadFile(data, fileName, type="text/plain") {
  // Create an invisible A element
  const a = document.createElement("a");
  a.style.display = "none";
  document.body.appendChild(a);

  // Set the HREF to a Blob representation of the data to be downloaded
  a.href = window.URL.createObjectURL(
    new Blob([data], { type })
  );

  // Use download attribute to set set desired file name
  a.setAttribute("download", fileName);

  // Trigger the download by simulating click
  a.click();

  // Cleanup
  window.URL.revokeObjectURL(a.href);
  document.body.removeChild(a);
}
// ]]></script>
//
函数调用:

<a href="javascript:downloadFile('https://cdn.shopify.com/s/files/1/0037/4951/1217/files/ascence-places-like-that-ncs-release.mp3?360','test.MP3')">My Download</a>

如果查看下载的文件,您会发现其中包含文本
https://cdn.shopify.com/s/files/1/0037/4951/1217/files/ascence-places-like-that-ncs-release.mp3?360
因为这是为
数据传递的值,在创建blob时使用。创建blob的代码不会下载内容(SOP会阻止您的代码下载内容,当然,除非其他站点使用CORS覆盖它)

我认为您无法强制链接打开“保存”对话框。通常,这是由服务器对链接的响应触发的(通过
内容处置
标题),当然在您的场景中无法控制。使用
download
属性不会这样做,它不会影响跨源(除非链接是
data:
blob:
URL,请参阅)


您可以向他们显示链接,以便他们右键单击并选择“将目标另存为…”,但我知道这将是一个令人失望的答案。

非常感谢您的回复!因此,基本上是因为我无法控制Content Disposition标头中的服务器响应,因为我正在使用Shopify,所以我无法强制链接打开保存对话框,这就是您所说的?@A.McKeown-是的,没错。(除非涉及到可以通过代理的服务器。:-)