Загрузите изображение и измените размер в nodejs

То, что я пытаюсь сделать, это загрузить изображение из Google в мой системный репозиторий в папке проекта /download. Далее я пытаюсь получить изображение из репозитория download, изменить размер и снова сохранить изображение с измененным размером в репозиторий /thumbnail. Ниже приведен код, который я написал

     //Google URL
     var mainuri = 'http://images.sadhguru.org/sites/default/files/media_files/iso/en/64083-natures-temples.jpg';
            var dir = './download';

        if (!fs.existsSync(dir)){
            fs.mkdirSync(dir);
        }
      // CODE TO DOWNLOAD IMAGE FROM GOOGLE 
        var filename = dir+'/file.jpg';
            request.head(mainuri, function(err, res, body){
              console.info('content-type:', res.headers['content-type']);
              console.info('content-length:', res.headers['content-length']);

              request(mainuri).pipe(fs.createWriteStream(filename));
            });


            var resizedir = './thumbnail';

            if (!fs.existsSync(resizedir)){
                fs.mkdirSync(resizedir);
            }

      //CODE TO GET IMAGE FROM '/download' REPOSITORY AND RESIZE
            var inputFile=require('path').join(__dirname,'../download/file.jpg'); //GET IMAGE FROM LOCAL
            var outFile = 'thumbnail/newfile.jpg'; // SAVE RESIZED IMAGE PATH 

// ------- CODE REMOVED - ERROR IS COMING HERE -----------

           imageresize(inputFile, outFile); // FUNCTION THAT CONTAINS IMAGE RESIZE CODE 

//imageresize FUNCTION

            var imageresize = function(inputFile, outFile){
            console.info(inputFile)
            // input stream
            let inStream = fs.createReadStream('C:/Users/rganji/caw/server/download/file.jpg');

            // output stream
            let outStream = fs.createWriteStream(outFile, {flags: "w"});

            // on error of output file being saved
            outStream.on('error', function() {
                console.info("Error");
            });

            // on success of output file being saved
            outStream.on('close', function() {
                console.info("Successfully saved file");
            });

            // input stream transformer
            // "info" event will be emitted on resize
            let transform = sharp()
                                .resize({ width: 50, height: 50 })
                                .on('info', function(fileInfo) {
                                    console.info("Resizing done, file not saved");
                                });

            inStream.pipe(transform).pipe(outStream);
        }   

Если я удалю код, который я прокомментировал как КОД УДАЛЕН - ЗДЕСЬ ПОЯВЛЯЕТСЯ ОШИБКА, тогда изображение загружается из Google. Если я вызываю функцию imageresize, создается каталог /download, но я не могу найти в нем изображения.

то есть, если я вызываю функции загрузки из google и resizeimage отдельно, то есть сначала вызываю загрузку изображения из google, а затем imageresize, тогда они работают нормально, то есть я могу найти изображения как в каталогах /download, так и в каталогах /thumbnail. Но если я вызову функцию изменения размера изображения после загрузки Google, я не смогу найти изображение в обоих репозиториях.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 657
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно дождаться завершения загрузки изображения, прежде чем вызывать функцию imageresize. Попробуй это

request(mainuri).on('end', function() {
    var inputFile=require('path').join(__dirname,'../download/file.jpg'); //GET IMAGE FROM LOCAL
    var outFile = 'thumbnail/newfile.jpg'; // SAVE RESIZED IMAGE PATH 
    imageresize(inputFile, outFile);
});

да, нам нужно подождать, и это «закрыть» вместо «конец»

rji rji 26.06.2019 10:34

Другие вопросы по теме