2015-09-01 5 views
0

Я ищу способ изменить размер изображения (загружаемого стандартной формой html), прежде чем отправлять его в облако (openstack, s3 или else).NodeJS + Multer + PkgCloud: изменить размер изображения перед его отправкой в ​​облако

Я использую NodeJS и 3 плагина: Multer (управление загрузкой), lwip (изменение размера изображения) и PkgCloud (перенос в облако).

Я могу обрабатывать загрузку с помощью multer, и я могу написать новый файл с измененным размером на сервере с помощью lwip.

var fs = require('fs'), 
    multer = require('multer'), 
    upload = multer({ dest: 'uploads/medias/' }), 
    pkgcloud = require('pkgcloud'), 
    client = pkgcloud.storage.createClient({/* some config */}); 

// "router" is an instance of a route from Express 
router.post('/media/:id/image', upload.single('file'), function (req) { 
    var lwip = require('lwip'), 
     type = 'png', 
     npath = req.file.path + '_150x150'; 

    // the file exists and the log shows information 
    console.log(req.file); 

    // open image 
    lwip.open(req.file.path, type, function (err, image) { 
     image.batch() 
      .resize(150, 150) 
      .writeFile(npath, type, function() { 
       // remove raw file 
       fs.unlink(req.file.path, function() { 
        // how do I send the new resized file to the pkgcloud client? 
       }); 
      }); 
    }); 
}); 

Но у меня что-то не хватает, и я не могу найти способ отправить этот новый файл в облако. Я обнаружил плагин, который управляет передачей между multer и сконфигурированным экземпляром pkgcloud (multer-storage-pkgcloud), но я не могу понять, как изменить размер файла перед его отправкой в ​​облако.

Есть ли у кого-нибудь идеи, как с этим справиться?

Благодаря

ответ

0

Я нашел способ сделать это, просто создать поток из файла и трубы его с pkgcloud например:

var fstream = fs.createReadStream(path_to_file); 
fstream.pipe(client.upload({ 
    container: 'container-id', 
    remote: 'remote-name' 
}); 

отсутствует в этом коде: все успехи и ошибки обратные вызовы. Но идея здесь.