Javascript函数强制从URL下载MP3文件,但下载后MP3文件仅在VLC播放器上无法在我的计算机上播放?为什么?
我有一个Javascript函数,只要提供文件的URL和名称,就可以强制下载文件。这个函数工作得非常好,我从HTML标记/超链接中调用它。但一旦我的功能下载了MP3文件,它就不会在我的电脑上播放了。我已经设计了这个功能,用户可以下载不同的MP3和WAV文件后,点击该文件的相关链接。我只能在媒体播放器VLC上播放下载的MP3文件,它不会在我的笔记本电脑上播放。我的功能在下载过程中是否对MP3文件做了什么,或者为什么下载后它不会播放 我已经研究了MP3文件的变化和编码,但我不确定到底要找什么,或者我做错了什么。当我从其他网站下载MP3文件时,它们工作正常,可以直接播放 功能:Javascript函数强制从URL下载MP3文件,但下载后MP3文件仅在VLC播放器上无法在我的计算机上播放?为什么?,javascript,html,mp3,Javascript,Html,Mp3,我有一个Javascript函数,只要提供文件的URL和名称,就可以强制下载文件。这个函数工作得非常好,我从HTML标记/超链接中调用它。但一旦我的功能下载了MP3文件,它就不会在我的电脑上播放了。我已经设计了这个功能,用户可以下载不同的MP3和WAV文件后,点击该文件的相关链接。我只能在媒体播放器VLC上播放下载的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-是的,没错。(除非涉及到可以通过代理的服务器。:-)