【问题标题】:Node Read large zip file from URL and then Unzip it节点从 URL 读取大 zip 文件,然后解压缩
【发布时间】:2021-09-19 16:13:26
【问题描述】:

我正在使用 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`
                })

【问题讨论】:

    标签: node.js stream unzip adm-zip


    【解决方案1】:

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

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

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

     writeStream.on('close', function() {      
    
        fs.createReadStream(zipFile).pipepipe(unzip.Extract({
            path: uploadDir
        }));
        console.log('finished unzip');
    });
    

    【讨论】:

    • 但是从 on('close') 开始,你仍然加载了所有的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多