Blob对象表示一个不可变、原始数据的类文件对象。Blob 表示的不必定是JavaScript原生格式的数据。File接口基于Blob,继承了blob的功能并将其扩展使其支持用户系统上的文件。javascript
var aBlob = new Blob( array, options );
options 是可选的,它可能会指定以下两个属性:html
var debug = {hello: "world"}; var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});
经过建立URL对象指定文件的下载连接。java
建立新的URL表示指定的File对象或者Blob对象。json
objectURL = window.URL.createObjectURL(blob);
在每次调用createObjectURL()方法时,都会建立一个新的 URL 对象,即便你已经用相同的对象做为参数建立过。当再也不须要这些 URL 对象时,每一个对象必须经过调用 URL.revokeObjectURL()方法来释放。浏览器会在文档退出的时候自动释放它们,可是为了得到最佳性能和内存使用情况,你应该在安全的时机主动释放掉它们。数组
window.URL.revokeObjectURL(objectURL);
<a>
标签下载生成一个<a>
标签。浏览器
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
download 属性规定被下载的超连接目标。在<a>
标签中必须设置 href 属性。该属性也能够设置一个值来规定下载文件的名称。所容许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, 等等)。安全
link.download = fileName;
link.click();
MIME类型使用text/plain,用.txt文件的格式编码去下载doc(docx)文件(doc(docx)文件每次打开须要选择合适的编码,暂未找到解决方案,欢迎补充)。app
const foo = {hello: "world"}; const blob = new Blob([JSON.stringify(foo)], {type: "text/plain"}); const fileName = `${new Date().valueOf()}.doc`; const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = fileName; link.click(); window.URL.revokeObjectURL(link.href);
注 :下载指定扩展名的文件只须要对照MIME 参考手册设置type便可。函数