Записать несколько изображений на диск с помощью Node.js - PullRequest
0 голосов
/ 22 февраля 2019

Объяснение кода:

В первом .then () я получаю данные 10 изображений.Затем, используя для цикла , я перемещаюсь по каждому отдельному изображению.В следующей строке я создаю другой путь для сохранения изображения, следовательно, в $ {count}.

Теперь основная часть

Я использую axios , чтобы получить изображение, передав image.url .then () я получаю ответ и отправляю его по заранее сгенерированному пути.

Разрешение при получении данных и увеличение счетчика для изменения значения.путь в следующей итерации.Отклонение при возникновении любой ошибки

Я делаю console.log (count ++) , чтобы проверить, перебираю ли я все 10 изображений и получаю ли я 1 2 ....Вывод 10 ', что означает, что все работает нормально.


Проблема: Согласно коду, 10image должны быть сохранены в папке images с именами 'image1, image2 ... image10' .Но я получаю только первое изображение.Что я делаю неправильно?Следует ли записывать материал на диск для циклов?

client.search('Steve Angello')
.then(images => {
    let count = 1;

    for(image of images){
        const path1 = path.resolve(__dirname, 'images', `image ${count}.jpg`);
        axios({
            method: 'GET',
            url: image.url,
            responseType: 'stream'
        })
        .then((response) => {
                response.data.pipe(fs.createWriteStream(path1));

                return new Promise( (resolve, reject) => {
                    response.data.on('end', () => {
                        resolve();
                        console.log(count++);
                    })

                    response.data.on('error', (error) => {
                        reject(error);
                    })
                })
            })
        .catch((err) => console.log(err));   
    }

});

Снимок вывода

1 Ответ

0 голосов
/ 22 февраля 2019

Все изображения сохраняются в файл с именем 'image 1.jpg' (10 раз).Вы можете подтвердить это, добавив console.log прямо перед вызовом axios.

Я думаю, что самое простое решение - изменить ваш цикл с

for(image of images){
    const path1 = path.resolve(__dirname, 'images', `image ${count}.jpg`);

на

for (count = 0; count < images.length; count++) {
    image = images[i];
    const path1 = path.resolve(__dirname, 'images', `image ${count+1}.jpg`);
    // and any other references to count should be removed

...