记录一下项目中需要用到解压接口中获取的zip压缩包二进制流
这里接口返的格式是base64,需要转成blob二进制流
// base64转blob
dataURLtoBlob(dataurl, mime) {
const arr = dataurl.split(',')
const bstr = atob(arr[0])
let n = bstr.length
const u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new Blob([u8arr], { type: mime })
}
unfoldZip() {
this.loading = true
const params = {
fileType: '1',
downloadType: '3',
patientName: '',
tel: '',
certno: '',
prescriptionStatus: '',
advisoryStatus: 'DOCTOR_PRESCRIBE',
begnTime: '2023-11-15 00:00:00',
endTime: '2023-11-15 23:59:59',
pageNum: 1,
pageSize: 100
}
downloadFileBatch(params).then(res => {
const blob = this.dataURLtoBlob(res.data.data, res.data.mimeType)
JSZip.loadAsync(blob).then((zip) => {
for (const key in zip.files) {
if (!zip.files[key].dir) { // 判断是否是目录
// 判断是否是图片格式
if (/\.(png|jpg|jpeg|gif)$/.test(zip.files[key].name)) {
const base = zip.file(zip.files[key].name).async(
'base64') // 将图片转化为base64格式
base.then(res => {
// 解压后的文件放到dataList数组,可直接在image标签中展示
this.dataList.push({
fileName: zip.files[key].name,
type: 'img',
content: `data:image/png;base64,${res}`
})
})
}
// 判断是否是文本文件
if (/\.(txt)$/.test(zip.files[key].name)) {
const base = zip.file(zip.files[key].name).async(
'string') // 以字符串形式输出文本内容
base.then(res => {
// 解压后的文件放到dataList数组
this.dataList.push({
fileName: zip.files[key].name,
type: 'text',
content: res
})
})
}
}
}
})
})
},
没啦!