前端使用 jszip 实现.zip文件解压后上传,示例代码:
const JSZip = require("jszip");
const axios = require("axios");
// 上传文件
function upload (file) {
let formData = new FormData();
formData.append("file", file);
axios.post("xxx/upload/file", formData).then(res => {
if (res.code === 200) {
}
})
}
// 解压 .zip 文件
async function unZip (zipFile) {
// let fileList = []
// 判断是否是 .zip 文件
let isZipFile = zipFile.type === "application/zip"
if (!isZipFile) {
return
}
const zip = new JSZip();
// 解压Zip压缩包,参数默认是二进制
const zipData = await zip.loadAsync(zipFile);
zipData.forEach(function (relativePath, file) {
// fix: 过滤 mac osx 系统压缩的副作用
if (!relativePath.startsWith("__MACOSX")) {
// 判断是否是目录
if (!file.dir) {
zip.file(file.name).async("uint8array").then(function (u8) {
// 创建 File 对象的
let blob = new File([u8], file.name)
// 将要上传的文件列表
/* fileList.push({
name: file.name,
file: blob
}) */
// console.log("fileList: ", fileList)
// 直接逐个上传解压后的文件
upload(blob)
});
}
}
})
}