我想下载一个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)
现在我有点困惑如何处理错误事件以及我的实际错误是什么?
答案 0 :(得分:1)
该进程是否有足够的权限写入/tmp
? /tmp
是否已有一些文件?
因为unlink
是一个删除目录的node.js函数。显然,unzip.Extract
称之为。因此,如果文件夹不为空,则unlink
会失败(在您的情况下为/tmp
)。
答案 1 :(得分:0)
将解压缩位置设置为特定目录可以修复它
fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/7zip' }));
我将mostruash的回答标记为正确,因为他带我走上了正确的轨道。