Скачать большое количество изображений с помощью Axios / Node - PullRequest
0 голосов
/ 03 октября 2019

Я хочу загрузить большое количество изображений, используя 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, который, кажется, немного помогает:

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

Но сейчас я получаю следующие ошибки:

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

1 Ответ

0 голосов
/ 03 октября 2019

Получается, что я максимизировал свои TCP-соединения.

Используя эту библиотеку, я установил лимит, чтобы он делал это партиями с Axios, и это решило проблему для меня

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

...