NodeJS createWriteStream正在流式传输但未写入

n3h0vuf2  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(136)

我最近才注意到下面的代码没有做它之前做的事情...将文件写入磁盘。

const download = async (archive) => {
    const d = await new Promise((resolve) => {      
        const opts = { method: 'GET' };
        const req = https.request(url, opts, (res) => {
            const file = fs.createWriteStream(`path/to/${archive}`);

            res.on('data', (chunk) => {
                    file.write(chunk);
                    //process.stdout.write(chunk);
                })
                .on('end', () => file.end());
    
            resolve(archive);
        });
        
        req.on('error', (error) => console.error(error));
        req.end();
    });
}

文件在磁盘上创建,但只有0B。如果我取消注解process.stdout.write(chunk),它会很高兴地向控制台吐出二进制文件的官样文章。但实际上并没有将任何内容写入磁盘。
我在哪里出错了?或者最近在node中发生了什么变化,悄悄地把我的代码搞砸了?很高兴有任何指导。

0md85ypi

0md85ypi1#

**更新:**我很快就说话了。见下面的评论
update2:this helped me。完整的zip文件正在下载和解压现在正确

感谢来自@jfriend00的评论,下面的编辑修复了这个问题

const download = async (archive) => {
    const d = await new Promise((resolve) => {      
        const opts = { method: 'GET' };
        const req = https.request(url, opts, (res) => {
            const file = fs.createWriteStream(`path/to/${archive}`);

            res.on('data', (chunk) => {
                    file.write(chunk);
                })
                .on('end', () => {
                    file.end());
                    // moving resolve() here
                    resolve(archive);
                });
    
            //resolve(archive);
        });
        
        req.on('error', (error) => console.error(error));
        req.end();
    });
}

我可以发誓原始代码工作正常,然后停止工作,但我很高兴我没有发誓。

更新:

上面的编辑没有帮助。虽然现在文件确实下载了,但它没有正确下载。这是一个zip文件,但当我尝试解压缩它时,我得到一个错误

Error: Command failed: … 
  End-of-central-directory signature not found.  Either this 
  file is not a zipfile, or it constitutes one disk of a 
  multi-part archive.  In the latter case the central directory 
  and zipfile comment will be found on the last disk(s) of this 
  archive.

但是当我直接下载文件时,它解压得很好。所以我的代码无法正确下载文件。

相关问题