如何使用jszipNode js将文件添加到zip中?



实际上我是通过使用jszip包将文件数组添加到zip中。包根据日期添加我的文件,所以我想看到我的数组的第一个元素是zip中的第一个文件,但是包根据日期一个接一个地添加,我的第一个元素到最后一个,数组的最后一个元素到第一个位置。

我循环我的数组,并希望一个一个地添加项目到zip文件。不按日期排序。

我尝试了一下代码,它工作得很好…下面是代码:

var JSZip = require("jszip");
var fs = require("fs");
var zip = new JSZip();
const qrCodes = {
qrCodes: [
"b",
"a",
"c"
],
tagsInfo: {
"a": {
tagId: "a_id",
tagCode: "a_code"
},
"b": {
tagId: "b_id",
tagCode: "b_code"
},
"c": {
tagId: "c_id",
tagCode: "c_code"
}
}
}
// looping the array
qrCodes.qrCodes.map((qrCode) => {
zip.file( `${qrCodes.tagsInfo[qrCode].tagId}_${qrCodes.tagsInfo[qrCode].tagCode}.svg`, `${qrCode}` );
});
// saving the zip file
zip
.generateNodeStream({type:'nodebuffer',streamFiles:true})
.pipe(fs.createWriteStream('out.zip'))
.on('finish', function () {
// JSZip generates a readable stream with a "end" event,
// but is piped here in a writable stream which emits a "finish" event.
console.log("out.zip written.");
});

我在macOS上,所以我使用zipinfo工具来检查顺序:

NodeJSTest % zipinfo out.zip 
Archive:  out.zip
Zip file size: 391 bytes, number of entries: 3
-rw----     2.0 fat        1 bl stor 22-Nov-22 07:47 b_id_b_code.svg
-rw----     2.0 fat        1 bl stor 22-Nov-22 07:47 a_id_a_code.svg
-rw----     2.0 fat        1 bl stor 22-Nov-22 07:47 c_id_c_code.svg
3 files, 3 bytes uncompressed, 3 bytes compressed:  0.0%

虽然如果我直接在Finder中提取,它通过名称排序,但仍然zip本身的内容(没有提取)是正确排序的!如果你是在windows上,你可以通过打开zip来检查订单,比如7zip,检查订单而不提取它…

最新更新