Nodejs异步提取zip
Nodejs extract zip ansynchronously
我目前正在使用 adm-zip
将 zip 文件解压到特定路径,但它的 extractAllTo
方法是同步的。
有什么方法可以异步提取 zip 文件吗?
尝试在 npm 上使用异步解压缩库:https://www.npmjs.com/package/async-unzip
这在内存中工作,并且是 100% 异步的,这将为您提供您想要的行为 =)
这是一个例子:
var async = require('async'),
path = require('path'),
ZipFile = require('async-unzip').ZipFile,
zipFile = new ZipFile('/home/user/Name.app.dSYM.zip'),
noMoreFiles = false;
async.whilst(function () {
return !noMoreFiles;
}, function (cb) {
async.waterfall([
function (cb) {
zipFile.getNextEntry(cb);
},
function (entry, cb) {
if (entry) {
if (entry.isFile) {
var match = entry.filename.match(/^[^\/]+\.dSYM\/Contents\/Resources\/DWARF\/(.+)/);
if (match) {
console.log(match);
console.log(entry);
async.waterfall([
function (cb) {
entry.getData(cb);
},
function (data, cb) {
// `data` is a binary data of the entry.
console.log(data.length);
cb();
}
], cb);
}
}
} else {
noMoreFiles = true;
}
cb();
}
], cb);
}, function () {
// DO NOT FORGET to call `close()` to release the open file descriptor,
// otherwise, you will quickly run out of file descriptors.
zipFile.close();
console.log(arguments);
});
好吧,我知道这个问题很老但是因为我在 google 上找到它(作为搜索 "asynchronous extraction adm-zip" 时的第一个结果之一),上面给出的答案没有使用 adm- zip 但另一个库,我想我应该回答它:
Adm-zip 有一个 "extractAllToAsync" 功能(遗憾的是他们的文档中没有)。它与 extractAllTo 基本相同,但多了一个可选参数(回调函数)并且异步工作(从代码来看,它几乎所有工作都是异步的)。
用法:
var zip = new AdmZip(source);
var zipEntries = zip.getEntries();
zip.extractAllToAsync(destination,overwrite? True/False,callback(error){})
我目前正在使用 adm-zip
将 zip 文件解压到特定路径,但它的 extractAllTo
方法是同步的。
有什么方法可以异步提取 zip 文件吗?
尝试在 npm 上使用异步解压缩库:https://www.npmjs.com/package/async-unzip
这在内存中工作,并且是 100% 异步的,这将为您提供您想要的行为 =)
这是一个例子:
var async = require('async'),
path = require('path'),
ZipFile = require('async-unzip').ZipFile,
zipFile = new ZipFile('/home/user/Name.app.dSYM.zip'),
noMoreFiles = false;
async.whilst(function () {
return !noMoreFiles;
}, function (cb) {
async.waterfall([
function (cb) {
zipFile.getNextEntry(cb);
},
function (entry, cb) {
if (entry) {
if (entry.isFile) {
var match = entry.filename.match(/^[^\/]+\.dSYM\/Contents\/Resources\/DWARF\/(.+)/);
if (match) {
console.log(match);
console.log(entry);
async.waterfall([
function (cb) {
entry.getData(cb);
},
function (data, cb) {
// `data` is a binary data of the entry.
console.log(data.length);
cb();
}
], cb);
}
}
} else {
noMoreFiles = true;
}
cb();
}
], cb);
}, function () {
// DO NOT FORGET to call `close()` to release the open file descriptor,
// otherwise, you will quickly run out of file descriptors.
zipFile.close();
console.log(arguments);
});
好吧,我知道这个问题很老但是因为我在 google 上找到它(作为搜索 "asynchronous extraction adm-zip" 时的第一个结果之一),上面给出的答案没有使用 adm- zip 但另一个库,我想我应该回答它:
Adm-zip 有一个 "extractAllToAsync" 功能(遗憾的是他们的文档中没有)。它与 extractAllTo 基本相同,但多了一个可选参数(回调函数)并且异步工作(从代码来看,它几乎所有工作都是异步的)。
用法:
var zip = new AdmZip(source);
var zipEntries = zip.getEntries();
zip.extractAllToAsync(destination,overwrite? True/False,callback(error){})