JSZip в петле?
Можно ли создавать реальные 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 ответа
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))
Если я правильно понимаю ваш вопрос, то это проблема вызвана новым 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.");
})
Надеюсь это поможет!