Загрузите изображение и измените размер в nodejs - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь загрузить изображение из 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.log('content-type:', res.headers['content-type']);
              console.log('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.log(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.log("Error");
            });

            // on success of output file being saved
            outStream.on('close', function() {
                console.log("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.log("Resizing done, file not saved");
                                });

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

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

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

1 Ответ

0 голосов
/ 26 июня 2019

Вам нужно дождаться окончания загрузки изображения, прежде чем вызывать функцию 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...