使用Axios / Node下载大量图像

时间:2019-10-03 13:21:57

标签: node.js axios fs

我想使用Axios / Node.js下载大量图像

这是我用来下载图像并将其保存到磁盘的代码:

exports.DownloadImages = function (provider, data) {
    data.forEach(function (vehicle) {
        var images = vehicle.Gallery;
        images.forEach(function (image) {
            const url = transformation.replaceAll(image, '[size]', 'original');
            const filename = transformation.replaceAll(transformation.ImageFilename(url), '[size]', 'original');
            const writer = fs.createWriteStream('./export/' + provider + '/' + filename);
            api.get(url, { responseType: 'stream' }).then((response) => {
                response.data.pipe(writer);
            })
                .catch((error) => {
                    console.error('[HELPER] DownloadImages ' + error + ' on Image ' + url);
                });

        });
    });
};

在我目前的测试中,我正在下载大约500张图像,我会说80%的图像已正确下载并保存,但是在日志中却出现了一些错误:

[HELPER] DownloadImages Error: read ECONNRESET on Image https:\\xxxx.com\imageurl.png

当我查看下载的图像时,似乎其中一些图像仅被部分下载(例如,我可以看到图像的顶部,但其余部分丢失了)

编辑:

我已将以下内容添加到我的axios get请求中,这似乎有所帮助:

httpsAgent: new https.Agent({ keepAlive: true })

但是我现在收到以下错误:

Error: socket hang up
Error: Client network socket disconnected before secure TLS connection was established

1 个答案:

答案 0 :(得分:0)

所以事实证明我正在最大化我的TCP连接。

我使用这个库设置了一个限制,因此它与Axios一起批量处理,这为我解决了这个问题

https://github.com/bernawil/axios-concurrency