使用 nodejs 提取 zip 文件时未处理的 'error' 事件
Unhandled 'error' event when extracting zip file with nodejs
我想下载一个 zip 文件并用 nodejs 解压。这是我到目前为止所做的:
var fs = require('fs');
var wget = require('wget-improved');
var filesizeHumanReadable = require('filesize');
var unzip = require('unzip');
var downloadCSS = function() {
var src = 'http://7-zip.org/a/7za920.zip';
var output = '/tmp/7z.zip';
var options = {};
var download = wget.download(src, output, options);
download.on('error', function(err) {
console.log(err);
});
download.on('start', function(fileSize) {
console.log(filesizeHumanReadable(fileSize));
});
download.on('end', function(outputMessage) {
console.log(outputMessage);
console.log(output);
fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/' }));
});
download.on('progress', function(progress) {
// code to show progress bar
});
}
我在 运行 时收到的错误消息:
mles-MacBook-Pro:test-api mles$ node index.js
375.83 KB
Finished writing to disk
/tmp/7z.zip
events.js:85
throw er; // Unhandled 'error' event
^
Error: EPERM, unlink '/tmp'
at Error (native)
现在我有点困惑如何处理错误事件以及我的实际错误是什么?
进程是否有足够的权限写入/tmp
? /tmp
是否已经有一些文件?
因为unlink
是删除目录的node.js函数。显然,unzip.Extract
调用它。因此,如果文件夹不为空(在您的情况下 /tmp
),unlink
将失败。
将解压缩位置设置到特定目录可以修复它
fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/7zip' }));
我将 mostruash 的回答标记为正确,因为他让我走上了正确的轨道。
我想下载一个 zip 文件并用 nodejs 解压。这是我到目前为止所做的:
var fs = require('fs');
var wget = require('wget-improved');
var filesizeHumanReadable = require('filesize');
var unzip = require('unzip');
var downloadCSS = function() {
var src = 'http://7-zip.org/a/7za920.zip';
var output = '/tmp/7z.zip';
var options = {};
var download = wget.download(src, output, options);
download.on('error', function(err) {
console.log(err);
});
download.on('start', function(fileSize) {
console.log(filesizeHumanReadable(fileSize));
});
download.on('end', function(outputMessage) {
console.log(outputMessage);
console.log(output);
fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/' }));
});
download.on('progress', function(progress) {
// code to show progress bar
});
}
我在 运行 时收到的错误消息:
mles-MacBook-Pro:test-api mles$ node index.js
375.83 KB
Finished writing to disk
/tmp/7z.zip
events.js:85
throw er; // Unhandled 'error' event
^
Error: EPERM, unlink '/tmp'
at Error (native)
现在我有点困惑如何处理错误事件以及我的实际错误是什么?
进程是否有足够的权限写入/tmp
? /tmp
是否已经有一些文件?
因为unlink
是删除目录的node.js函数。显然,unzip.Extract
调用它。因此,如果文件夹不为空(在您的情况下 /tmp
),unlink
将失败。
将解压缩位置设置到特定目录可以修复它
fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/7zip' }));
我将 mostruash 的回答标记为正确,因为他让我走上了正确的轨道。