Node.js 请求下载文件有时为空或不存在

2023-12-19

我正在使用 node.js 和请求模块编写一个下载器。使用我正在做的流语法

var r = request(url).pipe(fs.createWriteStream(targetPath));
r.on('error', function(err) { console.log(err); });
r.on('finish', cb);

下载文件,保存并调用回调。然而,在几乎 50% 的情况下,该文件要么是空的,要么根本没有创建。不error事件被发出。似乎是finish即使文件尚未(完全)写入,事件也会被触发。

上下文:整个事情都包含在async.each calls.

有什么线索吗?谢谢!


您需要在访问文件之前关闭该文件:

var file = fs.createWriteStream(targetPath);
var r = request(url).pipe(file);
r.on('error', function(err) { console.log(err); });
r.on('finish', function() { file.close(cb) });

顺便说一句,如果 url 回复任何 http 错误(例如未找到 404),则不会触发“错误”事件,因此您应该单独检查:

function handleFailure(err) { console.log(err); };

var file = fs.createWriteStream(targetPath);
request(url, function(error, response) {
    if (response.statusCode != 200) {
        console.log("oops, got a " + response.statusCode);
        return
    }
    // close is async, and you have to wait until close completes otherwise
    // you'll (very rarely) not be able to access the file in the callback.
    file.on('finish', function() { file.close(cb) });

    response.pipe(file).on('error', handleFailure)
    file.on('error', handleFailure)
}).on('error', handleFailure);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 请求下载文件有时为空或不存在 的相关文章

随机推荐