我目前正在编写一个chrome扩展程序,并坚持如何将xmlhttprequest的responsetext作为文件处理。正如标题所说,我需要下载给定链接的mp3并将其保存为我可以在我的扩展中再次访问的任何地方的真实物理文件。鉴于类型不是简单的文本,我似乎无法找到有关如何从javascript保存文件的信息。任何帮助表示赞赏,谢谢。
答案 0 :(得分:1)
thi是在你的情况下使用xhr加载和mp3的函数,covertsit到base64然后用base64文件字符串执行一个函数
var xhrfile=function(i,f){
var c=new XMLHttpRequest();
c.open('GET',i);
c.responseType='arraybuffer';
//c.onprogress=function(e){var perc=Math.round((e.loaded/e.total)*100)+' of 100'};
c.onload=function(e){
var u8=new Uint8Array(this.response),ic=u8.length,bs=[];
while(ic--){bs[ic]=String.fromCharCode(u8[ic]);};
f('data:audio/mpeg;base64,'+btoa(bs.join('')));
};
c.send();
}
用法:
xhrfile('http://domain.com/your.mp3',filefunc)
现在你要保存文件使用indexedDB,websql,localstorage,fileApi或者你想要的任何东西....现在是一个字符串。
考虑到这提到的节省可能性有文件限制。
您也可以直接输出要下载的文件:
var filefunc=function(mp3data){
var a=document.createElement('a');
a.download='mp3name.mp3';
a.href=mp3data;
a.innerText='download the file';
document.body.appendChild(a);
}
我没有用mp3测试过这个功能...我知道它适用于图像和其他小文件。可以从一个小的mp3文件开始。
这是blob版本。
var xhrfile=function(i,f){
var c=new XMLHttpRequest();
c.open('GET',i);
c.responseType='arraybuffer';
c.onload=function(e){
var blob = new Blob([this.response]);
f(blob);
};
c.send();
}
blob to object url:
var objurl=window.URL.createObjectURL(blob);
免费记忆
window.URL.revokeObjectURL(objurl);