节点https从url获取文件并解压缩

时间:2017-07-25 22:57:00

标签: node.js http request unzip

我正在使用节点https / http模块下载文件。代码如下所示:

https.get(url)
.on('response', (response) => {
    response.pipe(fs.createWriteStream(dataDir + filename))
}

在下一步中,我使用unzip模块解压缩文件。

fs.createReadStream(dataDir + filename)
.pipe(unzip.Extract({path: dataDir}))
.on('close', () => { something }
.on('error', () => { catch error}

对于大多数情况,一切运作良好。但是,有时unzip模块会返回此错误:

Error: invalid signature: 0x6d74683c

我能注意到的唯一问题是文件名。我从网址抓取文件名。它是网址的最后一个参数。但是,在某些情况下,确切的文件名与url中显示的文件名不同。例如:

https://github.com/request/request/archive/master.zip

网址中显示的名称为master.zip,但下载时名称为request-master.zip

这是实际问题吗?如果是这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

文件名很可能是症状而不是根本原因。 unzip模块未维护且存在许多未解决的问题。无论如何,这都可能是罪魁祸首,不应该被使用。

请尝试decompressyauzl。此外,由于您尝试在流中提取存档,因此您可能希望了解其如何not truly possible