我想处理一个很大的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似乎已填充,但其长度保持为零。当我删除测试的长度时,什么也没有发生。我的方法正确吗?有什么帮助吗?
答案 0 :(得分:0)
我查看了JSZip的内部结构,并按照@ patrick-evans的建议,确认allocator_traits<Allocator>::allocate
方法不了解Promise。
这是我的解决方案:
forEach()