如何使用jszip从客户端的ZIP文件中选择文件

时间:2019-08-31 10:36:27

标签: javascript jszip

我想处理一个很大的ZIP文件,我只想在其中提取一些PDF文件,然后将它们上传到服务器。我的应用程序中已经有一个函数,该函数接受文件数组,将其发送并从服务器获取处理结果。

我关心的是如何从ZIP中设置等效的文件数组。

我已经测试了zip.js和jszip.js,但是得到了一些奇怪的结果。 这是我的jszip代码

async function unzipAndSelect( zipFile ) {
   var flist = [];
   var zip = await JSZip.loadAsync(zipFile);
   await zip.forEach( async function (relativePath, zipEntry) {

      var match = zipEntry.name.match( /REGEX.pdf$/ );
      if(match) {
         var blob = await zip.file( zipEntry.name ).async("blob");
         var file = new File( [blob], zipEntry.name, {type : 'application/pdf'} );
         flist.push( file );
      }
   });
   console.log( fileList );
   return flist;
}

uploadPDFs( fileList ) {
   if(fileList.length) {
      fileList.forEach( function(f) {
         // upload stuff ...
      }
   }
}

var fileList = unzipAndSelect( "myfile.zip" );
uploadPDFs( fileList );

fileList似乎已填充,但其长度保持为零。当我删除测试的长度时,什么也没有发生。我的方法正确吗?有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我查看了JSZip的内部结构,并按照@ patrick-evans的建议,确认allocator_­traits<Allocator>​::​allocate方法不了解Promise。

这是我的解决方案:

forEach()