JSZip создает пустой архив - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь загрузить папку, рекурсивно добавляя файлы и подпапки в zip, а затем загружая zip, используя AJAX. Ниже приведен код, который я написал:

if(item.isDirectory){
    var zip = new JSZip();
    create_zip_dir(zip, item, "");

    zip.generateAsync({
      type: "blob"
    }).then(function (file) {
      console.log(file);
      file = new File([file], item.name + ".zip", {
        type: "application/zip"
      })
      console.log(file);
      //console.log(file); 
      do_upload(file, wd_id);
    });

function create_zip_dir(zip, item, path){

  if(item.isFile){
    var name = path + item.name;  
    item.file(function(file) {
      if(file.name.substring(file.name.lastIndexOf('.')+1) === "docx"){
        file = new File([file], file.name, {
          type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
        })
      }
      zip.file(name, file);
    });
  } else if(item.isDirectory){
    var dirReader = item.createReader();
    dirReader.readEntries(function(entries) {
      for (var i=0; i<entries.length; i++) {
        create_zip_dir(zip, entries[i], path +  item.name + "/");
      }
    });
  }
}

Однако, независимо от того, какое содержимое папки я пытаюсь сжать, создаваемый большой двоичный объект всегда имеет размер 22 байта. Наш файл console.log, который я вижу:

Blob {size: 22, type: "application/zip"}
size: 22
type: "application/zip"
__proto__: Blob

Когда я проверяю .zip после загрузки, архив неизменно пуст. Любая помощь приветствуется.

...