我正在使用JSZip生成包含多个文件的zip。数据来自服务器,采用JSON格式。 我只在for循环中获取2个文件而不是多个文件。 JSON数组的大小超过2,所以我希望多个文件不仅仅是2。
var zip = new JSZip();
var root = data.list.dataList;
var length = root.length;
var i;
for(i = 0; i < length; i++){
var aFileName = "a_"+ root[i].type + "_" + root[i].orderNumber + ".xml";//just the name of the file
var aContent = root[i].content; //content of file
var bFileName = "b_"+ root[i].type + "_" + root[i].orderNumber + ".xml";//just the name of the file
var bContent = root[i].content; //content of file
//put files onto a folder
zip.folder("Folder Name").file(aFileName, aContent).file(bFileName, bContent);
}
//generate the zip with all files
var content = zip.generate();
location.href="data:application/zip;base64," + content;
有人可以建议替代方案,因为此代码仅采用最后一次迭代的内容。这就是我只能获得2个文件而不是多个文件的原因。
答案 0 :(得分:0)
试试这个:
for(i = 0; i < length; i++){
var aFileName = "a_"+ root[i].type + "_" + root[i].orderNumber + "_" + i + ".xml";
var aContent = root[i].content; //content of file
var bFileName = "b_"+ root[i].type + "_" + root[i].orderNumber + "_" + i + ".xml";
var bContent = root[i].content; //content of file
//put files onto a folder
zip.folder("Folder Name").file(aFileName, aContent).file(bFileName, bContent);
}
我尝试类似如下,生成的文件夹包含6个文件。
var JSZip = require("jszip");
var fs = require("fs");
var zip = new JSZip();
var root = [{type:"type1",orderNumber:"1",content:"content1"},
{type:"type2",orderNumber:"2",content:"content2"},
{type:"type3",orderNumber:"3",content:"content3"}];
var length = root.length;
var i;
for(i = 0; i < length; i++){
var aFileName = "a_"+ root[i].type + "_" + root[i].orderNumber + ".xml";//just the name of the file
var aContent = root[i].content; //content of file
var bFileName = "b_"+ root[i].type + "_" + root[i].orderNumber + ".xml";//just the name of the file
var bContent = root[i].content; //content of file
//put files onto a folder
zip.folder("json_folder").file(aFileName, aContent).file(bFileName, bContent);
}
//generate the zip with all files
var content = zip.generate({type:"nodebuffer"});
fs.writeFile("json_folder.zip", content, function(err) {
if (err) throw err;
});
所以我想也许你的问题出现了,因为你的type和orderNumber对于每个项目是相同的,所以你一次又一次地覆盖你的文件内容。
答案 1 :(得分:-1)
试用插件:http://gildas-lormeau.github.io/zip.js/ 否则尝试将循环包装在
中try
{
}
catch (ex)
{
console.log(ex.message);
}
看看他是否会抛出一些错误