2017-07-25 298 views
0

我正在使用节点https/http模块来下载文件。代码如下所示:节点https从url获取文件并解压缩

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} 

对于大多数情况下,一切正常。但是,有时解压缩模块返回此错误:

Error: invalid signature: 0x6d74683c 

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

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

在URL中显示的名称是master.zip,但是当我下载它的名字是request-master.zip

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

回答

0

文件名最有可能是一个症状,而不是根本原因。 unzip模块没有维护,有许多未解决的问题。无论如何,这很可能会被指责并且不应该被使用。

改为使用decompressyauzl。另外,由于您试图在流中提取归档文件,因此您可能需要阅读关于如何操作not truly possible

+0

谢谢你的回应。我会先尝试yauzl。 – zhangjinzhou