解决Chrome扩展下载空MP3文件时的网络错误问题
解决Chrome扩展下载空MP3失败的问题
你当前使用的空data URI data:application/mp3 因无有效数据,被Chrome下载机制判定为无效资源,进而触发"Failed - Network error"错误。以下是两种可行的解决方案:
方案一:使用最小合法MP3的Data URI
使用一个经过base64编码的最小合法0秒MP3文件作为数据源,该文件符合MP3格式规范,可被Chrome正常下载,后续外部应用覆盖文件也不受影响。
修改后的代码:
function download(title) { return new Promise(resolve => { // 最小合法MP3的base64编码 const minimalMp3DataUri = "data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjY2LjEwMAAAAAAAAAAAAAAAAOfn57/iQAAAAEAAADbgAAAAEAAAAHAAADAA=="; chrome.downloads.download({ url: minimalMp3DataUri, filename: `${title}.mp3`, saveAs: true }, resolve); }); }
方案二:使用Blob与Object URL
通过创建空Blob对象并指定正确的MIME类型,生成临时Object URL供下载使用。这种方式更轻量化,无需额外的base64数据,仅需占位文件时优先选择。
修改后的代码:
function download(title) { return new Promise(resolve => { // 创建空Blob,指定audio/mpeg类型 const blob = new Blob([], { type: "audio/mpeg" }); const url = URL.createObjectURL(blob); chrome.downloads.download({ url: url, filename: `${title}.mp3`, saveAs: true }, (downloadId) => { resolve(downloadId); // 下载完成后释放临时URL,避免内存泄漏 URL.revokeObjectURL(url); }); }); }
两种方案均可解决下载失败问题:若需要文件本身为合法MP3格式,选方案一;仅需占位文件时,方案二更高效。
内容的提问来源于stack exchange,提问作者Batimius
相关产品推荐
相关产品推荐

