JSZip в петле? - PullRequest
       26

JSZip в петле?

0 голосов
/ 05 ноября 2018

Можно ли создавать реальные zip-папки и файлы с помощью JSZip в цикле, по одному на элемент? Если да, то как?

Примерно так:

var JSZip = require("jszip");
const saveAs = require('file-saver');
var fs = require("fs");

for(i = 0; i > 5; i++){
    var zip = new JSZip();
    zip.folder(i).file(i+".txt", i);

    zip
    .generateNodeStream({type:'nodebuffer',streamFiles:true})
    .pipe(fs.createWriteStream('Zipped Projects.zip'))
    .on('finish', function () {
        console.log("Zipped Projects.zip written.");
    })
}

Вне цикла создается фактическая папка zip с ожидаемым содержимым в текущем каталоге. Внутри цикла ничего не происходит, даже журнал.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018
var JSZip = require("jszip");
const saveAs = require('file-saver');
var fs = require("fs");

var asanaProjects = require("C:/Users/GabrielRivera/Documents/asana/New Projects JSON.json");

async function createProjectZips() {

    var zip = new JSZip();

    asanaProjects.map((project, index, array) => {

        zip.file(project.name+' - '+index+'.json', JSON.stringify(project));        
    })

    zip
        .generateNodeStream({type:'nodebuffer',streamFiles:true})
        .pipe(fs.createWriteStream('Zipped Projects.zip'))
        .on('finish', function () {
        //console.log("Zipped Projects.zip written.");
        })
}

createProjectZips()
.then(() => {
})
.catch(err=>console.log(err))
0 голосов
/ 05 ноября 2018

Если я правильно понимаю ваш вопрос, то эта проблема вызвана новыми zip объектами, создаваемыми за одну итерацию цикла.

Возможно, для решения этой проблемы вы могли бы внести следующие корректировки:

var JSZip = require("jszip");
const saveAs = require('file-saver');
var fs = require("fs");

// Create the single zip object that will be populated
// during the for loop
var zip = new JSZip();

// Populate the zip object with text files per iteration.
// Make sure you update the loop logic to use "i < 5"
for(var i = 0; i < 5; i++){
    zip.folder(i).file(i+".txt", i);
}

// Now that the zip object has been populated, write it to
// disk
zip
.generateNodeStream({type:'nodebuffer',streamFiles:true})
.pipe(fs.createWriteStream('Zipped Projects.zip'))
.on('finish', function () {
    console.log("Zipped Projects.zip written.");
})

Надеюсь, это поможет!

...