1

我正在使用 request.get(url) 从 URL 读取一个大的 zip 文件(500MB)。文件包含一个非常大的 CSV 文件。我正在阅读响应并使用 fs.createWriteStream(zipFile) 将文件流写入 zip 文件。在 fs.createWriteStream 的关闭事件中,我尝试使用 adm-zip 文件,我得到“错误无效或不支持的 zip 格式。找不到结束头”,而使用 Unzipper npm 包,我得到“无效的签名解压缩”。下面是代码

    const request = require('superagent');
const fs = require('fs');
const unzip = require('unzipper');
request.get(url).on('error', function(err) { console.log(err) }
                .pipe(fs.createWriteStream(zipFile))
                .on('close', function() {
                    const admZip = require('adm-zip');
                    console.log('start unzip');
                    var zip = new admZip(zipFile);
                    console.log('unzipping ' + uploadDir + "to");
                    zip.extractAllTo(uploadDir, true);
                    console.log('finished unzip');

带解压器

 request.get(url)
            .on('error', function(err) { console.log(err) }
                .pipe(fs.createWriteStream(zipFile))
                .on('close', function() {
                    fs.createReadStream(zipFile)
                        .pipe(unzipper.Extract({ path: UploadDir }));`enter code here`
                })
4

1 回答 1

0

错误已解决。第一步是管道传入的可读响应流。

 request.get(urlData)
    .pipe(writeStream);

读取完成后,管道将触发 writestream。然后我将在 writestream 的关闭事件上触发解压缩过程。

 writeStream.on('close', function() {      

    fs.createReadStream(zipFile).pipepipe(unzip.Extract({
        path: uploadDir
    }));
    console.log('finished unzip');
});
于 2021-07-11T10:39:07.173 回答