一、下载
在 javascript 中,可以使用浏览器提供的 blob 对象和 url.createobjecturl() 方法来实现文件流下载。
下面是一个示例代码,可以帮助了解如何在 javascript 中实现文件流下载:
function downloadfile(data, filename, type) {
// 创建 blob 对象
const blob = new blob([data], { type: type });
// 判断当前浏览器是否是ie,由于ie是没有download 方法的,需要用mssaveblob() 或 mssaveoropenblob()
if (window.navigator && window.navigator.mssaveoropenblob) {
// 兼容ie
window.navigator.mssaveoropenblob(blob, filename)
} else {
// 创建 url 对象
const url = url.createobjecturl(blob);
// 创建链接
const link = document.createelement('a');
link.href = url;
link.download = filename;
// 模拟点击链接进行下载
document.body.appendchild(link);
link.click();
document.body.removechild(link);
// 释放 url 对象
url.revokeobjecturl(url);
}
}
在这个示例中,我们定义了一个 downloadfile() 函数,这个函数接受三个参数:data、filename 和 type。其中,data 表示要下载的数据流,filename 表示要保存的文件名,type 表示要下载的文件类型。
在函数中,我们首先使用 blob 对象创建一个二进制数据流,然后使用 url.createobjecturl() 方法创建一个 url 对象。接着,我们创建一个链接元素,并将这个链接元素的 href 属性设置为 url 对象的 url,将 download 属性设置为要保存的文件名。最后,我们模拟点击链接元素,启动下载操作。
当下载完成后,我们需要释放 url 对象,以便浏览器可以回收这个对象的内存。这个操作可以使用 url.revokeobjecturl()方法来实现。
注意:ie中要使用window.navigator.mssaveoropenblob 或 window.navigator.mssaveblob来处理blob对象
用法:
1.mssaveoropenblob:提供保存和打开按钮
2.mssaveblob:只提供一个保存按钮
二、请求
在使用axios请求的时候,加上responsetype: 'blob'入参。请求示例如下:
axios({
// 请求头
headers: {
content-type: 'application/json;charset=utf-8'
},
responsetype: 'blob', // // `responsetype` 表示浏览器将要响应的数据类型,选项有'arraybuffer', 'document', 'json', 'text', 'stream',浏览器专属:'blob',默认是'json'
method: 'get', // 类型根据实际接口是get还是post
url: '接口url',
params: {}, // url参数
});
因为我们使用的是文件流下载,所以返回的响应对象就不是 json 类型,要换成 blob 类型.
三、示例
以下载excel为例:
axios({
headers: {
'content-type': 'application/json;charset=utf-8'
},
responsetype: 'blob',
method: 'get',
url: '#',
params: {}
}).then(res => {
downloadfile(res, '文件名称','application/xlsx')
})
实际根据请求的方法换成是get请求还是post请求,下载不同的文件对应不同的 blob 类型,这边excel文件下载用的是 application/xlsx,如果是下载别的类型的文件就换别的类型。
blob相关的文档可自行查看链接:
https://developer.mozilla.org/zh-cn/docs/web/api/blob/type
总结
到此这篇关于如何在javascript实现blob文件流下载的文章就介绍到这了,更多相关js blob文件流下载内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论