使用场景 :
用于批量上传。因为单条上传需要上传字段,文件,因此批量上传需要上传excel和zip包。 excel记录多条数据, 数据中的单条包括字段值, 有些字段值是zip包中的对应文件名,根据值来读取对应的file文件,用于单条上传。
npm i jszip -S
zipGetFile.js
import JSZip from 'jszip';
const parse_zip = (file_data, fileName)=> {
return new Promise((resolve, reject) => {
JSZip.loadAsync(file_data).then((zip) => {
zip.files[fileName].async('blob').then((blob) => {
// this.readTextAs(blob, "UTF-8").then(e => {
// resolve(e);
// }).catch(e => {
// reject(e);
// });
console.log(blob);
let files = new window.File(
[blob],
fileName,
{ type: blob.type }
);
resolve(files);
console.log(files);
})
}).catch(e => {
reject(e);
})
})
}
const parse_data = (file_data, fileName) => {
return new Promise((resolve, reject) => {
parse_zip(file_data, fileName).then(e => {
resolve(e)
// let data = null;
// try {
// data = JSON.parse(e);
// }
// catch (e) {
// data = null;
// }
// data ? resolve(data) : reject(null);
}).catch(e => {
reject(e);
})
});
}
const readTextAs = (arrayBuffer, encoding) => {
return new Promise((resolve, reject) => {
var reader = new FileReader();
var blob = new Blob([arrayBuffer]);
reader.onload = function (evt) {
resolve(evt.target.result);
};
reader.onerror = function (evt) {
reject(null);
};
reader.readAsText(blob, encoding);
}).catch(e => {
reject(e);
})
}
export default parse_data
zipGetFile(zip文件, 文件名).then(res => {})