java下载blob类型⽂件_Js之Blob类型以及⽂件流下载流程什么是blob?
以下是MDN的官⽅解释:Blob 对象表⽰⼀个不可变、原始数据的类⽂件对象。它的数据可以按⽂本或⼆进制的格式进⾏读取,也可以转换成 ReadableStream 来⽤于数据操作。
Blob 表⽰的不⼀定是JavaScript原⽣格式的数据。File 接⼝基于Blob,继承了 blob 的功能并将其扩展使其⽀持⽤户系统上的⽂件。
要从其他⾮blob对象和数据构造⼀个 Blob,请使⽤ Blob() 构造函数。
实际上 file 对象只是 blob 对象的⼀个更具体的版本,blob 存储着⼤量的⼆进制数据,并且 blob 的 size 和 type 属性,都会被 file 对象所继承。
所以, 在⼤多数情况下,blob 对象和 file 对象可以⽤在同⼀个地⽅,例如,可以使⽤ FileReader 借⼝从 blob 读取数据,也可以使⽤ateObjectURL() 从 blob 创建⼀个新的 URL对象。
blob的创建
Blob() 构造函数允许通过其它对象创建 Blob 对象。⽐如,⽤字符串构建⼀个 blobvar debug = {hello: "world"};
var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});
构造函数,接受两个参数,第⼀个为⼀个数据序列,可以是任意格式的值,例如,任意数量的字符串,Blobs 以及 ArrayBuffers。第⼆个参数,是⼀个包含了两个属性的对象,其两个属性分别是:
type -- MIME 的类型。
endings -- 决定 append() 的数据格式,(数据中的 \n 如何被转换)可以取值为 "transparent" 或者 "native"(t的话不变,n 的话按操作系统转换;t* 为默认) 。
blob的应⽤
⼤⽂件分割(分⽚上传)
slice() ⽅法接受三个参数,起始偏移量,结束偏移量,还有可选的 mime 类型。如果 mime 类型,没有设置,那么新的 Blob 对象的mime 类型和⽗级⼀样。
当要上传⼤⽂件的时候,此⽅法⾮常有⽤,可以将⼤⽂件分割分段,然后各⾃上传,因为分割之后的 Blob 对象和原始的是独⽴存在的。
不过⽬前浏览器实现此⽅法还没有统⼀,⽕狐使⽤的是 mozSlice() ,Chrome 使⽤的是 webkitSlice() ,其他浏览器则正常的⽅式 slice()
可以写⼀个兼容各浏览器的⽅法:function sliceBlob(blob, start, end, type) {
type = type || pe;
if (Slice) {
Slice(start, end, type);
在线测试网络} else if (blob.webkitSlice) {
return blob.webkitSlice(start, end type);
} else {
swagger漏洞
throw new Error("This doesn't work!");
}
excel教学课程全套免费百度云
}
⽂件流下载
后端返回的数据是⽂件流的时候,需要在axios请求指定responseType:// 下载接⼝ ⽂件下载
export function downloadRes(data) {
return request({
timeout: 30000,
responseType: 'blob', // 需要指定
baseURL: 'xxx',
method: 'post',
data
})
}
这是返回的data就是blob类型数据,但是我们下载的话还需要⼀个⽂件名,后端会默认指定把⽂件名放在content-disposition这个响应头:let fileName = '';
const contentDisposition = res.headers['content-disposition'];
if (contentDisposition) {
fileName = window.decodeURI(res.headers['content-disposition'].split('=')[1], "UTF-8");
}
创建blob对象,创建reader,监听加载时间,创建a标签,模拟点击事件,移除a标签。这就是⼀个⽂件流下载的基本流程:const blob = new Blob([res.data]);
const reader = new FileReader();
java下载过程const a = ateElement('a');
在c语言中什么意思scanfa.download = fileName;
a.href = sult;
document.body.appendChild(a);
a.click();
veChild(a);mybatisplus有必要学吗
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。