不完整/部分图像使用节点js下载

incomplete / partial Images are downloaded using node js

本文关键字:节点 js 下载 图像      更新时间:2023-09-26

我正在使用节点js以标准方式从站点下载图像。

var download = function (uri, filename, callback) {
    request.head(uri, function (err, res, body) {
        console.log('content-type:', res.headers['content-type']);
        console.log('content-length:', res.headers['content-length']);
        request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
    });
};

但是当我在 for 循环中运行此代码时,保存的图像已损坏。更要说的是,所有像素都没有下载。仅保存部分图像。

有没有办法解决这个问题?

好吧,我找到了问题的解决方案。原因是在映像完全写入磁盘之前,另一个线程启动,依此类推。为了解决这个问题,我使用 Q-IO 库实现了承诺。

var Apps = require("q-io/http");
var qfs = require("q-io/fs");
var download = function(uri, filename, callback){
Apps.read(uri).then(function(data){
    callback(data);
}, function(err){
    console.log('err: ' + err);
});
};
download('https://www.google.com/images/srpr/logo3w.png', 'test.jpg', function(data){
    console.log('done');
    qfs.write("test.jpg", data);
});

但是我没有使用 for 循环,而是使用了自调用函数。