0

我正在使用 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 个文件而不是多个文件的原因。

4

2 回答 2

1

尝试这个:

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;
});

所以我认为可能会出现您的问题,因为您的类型和 orderNumber 对于每个项目都是相同的,因此您一次又一次地覆盖您的文件内容。

于 2014-11-21T03:01:39.617 回答
-1

试用插件:http://gildas-lormeau.github.io/zip.js/ 否则尝试将循环包装在

try
{

}
catch (ex)
{
console.log(ex.message);
}

看看他是否抛出了一些错误

于 2014-09-24T18:45:57.237 回答