JSZip - как назвать файл с generateAsync, не загружая его

Доброе утро, я использую JSZip для создания почтового индекса, у меня есть этот код:

for (var i = 0, f; f = content[i]; i++) {
    var zip = new JSZip();
    zip.file(f.name, f);
    zip.generateAsync({type:"blob", compression:"DEFLATE", compressionOptions: { level: 9 }})
    .then(function(content) {
      var item = {
        'type' : content.type,
        'size' : content.size,
        //'name' : ¿content.name?
      }
   });
}

Я не хочу скачивать файл, я хочу загрузить его на свой сервер, но у него нет имени атрибута, у него два атрибута: тип и размер. Но мне нужно задать имя файлу.
Это не сработает, если я напишу «имя»: f.name, потому что функция асинхронная.
Кто-нибудь знает, как передать имя атрибута в контент.
Редактировать: или, если вы можете сказать мне, как сделать это не асинхронным, это тоже сработает.
Спасибо за помощь.


person Marlon Adarme    schedule 03.04.2018    source источник


Ответы (1)


Решено с помощью этого:
Используйте функцию, которая вызывает асинхронный метод, и получает ZIP и имя файла.

function makeZip(zip, name) {
    name = name.split('.')[0] + ".zip";
    zip.generateAsync({type:"blob", compression:"DEFLATE", compressionOptions: { level: 9 }})
      .then(function(content) {
         // see FileSaver.js
         console.log(content)
         saveAs(content, name)       
         var item = {
           'name': name,
           'type': content.type,
           'size': content.size,
           'guid': generatorguid()
         };
      });
}

А затем вызовите его из for:

for (var i = 0, f; f = content[i]; i++) {
    var fZip = new JSZip();
    fZip.file(f.name, f);
    makeZip(fZip, f.name);
}
person Marlon Adarme    schedule 04.04.2018