2016-11-02 2 views
0

Я плохо разбираюсь в английском, но у меня есть вопрос об использовании jszip. код, как этоткак jszip async zip-файл, когда много одиночного файла необходимо заархивировать

for (var i = 0; i < files.length; i++) { 
 
        compressFiles(files[i], compressName); 
 
       }

function compressFiles(file,compressName) { 
 
     var fileContent = file.file; 
 
     var fileName = file.name; 
 
     var zip = new JSZip(); 
 
     zip.file(fileName, fileContent); 
 
     zip.generateAsync({ type: "blob" }).then(function (content) { 
 
      saveAs(content, compressName); 
 
     }); 
 
    }

мой вопрос, когда мой файл в файлы очень большие, около 88м. некоторые сжимают файл около 0 м. Я думаю, причина в async, цикл помещает поток файлов в память один за другим, если память заполнена, сжимается. так кто может сказать мне настоящую причину? Спасибо!

ответ

1

Вы можете использовать массив, чтобы сохранить вызовы zip.file и jQuery.when дождаться завершения всех этих действий, а затем вызвать zip.generateAsync. Пример кода ниже.

Полезные ссылки:
jQuery.when
What does $.when.apply($, someArray) do?

function zipFiles(images) { 
    var zip = new JSZip(); 
    deferreds = []; 
    images.forEach(function(image) { 
     deferreds.push(zip.file(image.name, image.data, { binary: true })); 
    }); 
    $.when.apply($, deferreds).then(function() { 
     zip.generateAsync({ type: "blob" }).then(function(content) { 
      saveAs(content, 'Filename.zip'); //FileSaver.js 
     }); 
    }); 
} 
Смежные вопросы