使用nodejs解压缩zip文件时出现未处理的“错误”事件

时间:2016-02-24 08:06:19

标签: node.js wget unzip

我想下载一个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)

现在我有点困惑如何处理错误事件以及我的实际错误是什么?

2 个答案:

答案 0 :(得分:1)

该进程是否有足够的权限写入/tmp/tmp是否已有一些文件?

因为unlink是一个删除目录的node.js函数。显然,unzip.Extract称之为。因此,如果文件夹不为空,则unlink会失败(在您的情况下为/tmp)。

答案 1 :(得分:0)

将解压缩位置设置为特定目录可以修复它

fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/7zip' }));

我将mostruash的回答标记为正确,因为他带我走上了正确的轨道。