Я пытаюсь запросить огромное количество изображений на узле js (n> 3000)
а затем сохранить их в папку.
Я пытался использовать библиотеку запросов и запрос-обещание.
Проблема заключается в том, что если количество изображений слишком велико, некоторые изображения не завершают загрузку, оставляя неполные данные или получая ошибку (пустой файл .jpeg). Есть ли лучший способ загрузки огромного количества картинок?
Также мне нужно, когда картинки все скачать, чтобы запросить функцию компиляции ()
сделать их в видео. Я использую ffmpeg для этого.
Ниже приведены два способа, которыми я пытался это сделать.
const req = require('request');
const request = require('request-promise');
const fs = require('fs');
const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath(ffmpegPath);
function downloadImgs(imgUrls) {
let promises = [];
let prom;
for (let i = 0; i < imgUrls.length; i++) {
imgPath = `assets/pics/st_${pad(i + 1, 3)}.jpg`
prom = request(imgUrls[i]);
prom.on('error', () => console.log('err'));
prom.pipe(fs.createWriteStream(imgPath));
promises.push(prom);
}
Promise.all(promises).then(() => {
console.log('I Run');
compilee();
});
//SECOND TRY-----------------------------------------
for (let i = 0; i < imgUrls.lengh; i++) {
imgUrl = imgUrls[i];
req(imgUrl)
.on('error', () => console.log("img error", imgUrl))
.pipe(fs.createWriteStream(`assets/pics/st_${pad(i + 1, 3)}.jpg`)).on('close', () => {
console.log('downloaded', x)
})
}
compilee();
//---------------------------------------------------------
function compilee() {
command
.on('end', onEnd)
// .on('progress', onProgress)
.on('error', onError)
.input('assets/pics/st_%03d.jpg')
.inputFPS(5)
.output('assets/output/pepe.mp4')
.outputFps(30)
.run();
}
Ошибки, которые я получаю для first : UnhandledPromiseRejectionWarning: RequestError: Ошибка: зависание сокета
и второй :
Ошибка: сокет зависает
at createHangUpError (_http_client.js: 330: 15)
в TLSSocket.socketOnEnd (_http_client.js: 433: 23)
на TLSSocket.emit (events.js: 187: 15)
в endReadableNT (_stream_readable.js: 1098: 12)
в process.internalTickCallback
(internal / process / next_tick.js: 72: 19) код: 'ECONNRESET'}
Кроме того, я должен загрузить изображения на сервер или на клиент, если я хочу немедленно отправить видео клиенту.