无法使用JSZip添加多个文件

时间:2014-09-24 17:32:52

标签: javascript ajax jszip

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

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

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