NodeJS + Multer + PkgCloud: измените размер изображения перед отправкой в ​​облако

Я ищу способ изменить размер изображения (загруженного с помощью стандартной отправки HTML-формы) перед отправкой в ​​облако (openstack, s3 или другое).

Я использую 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), но я не могу понять, как изменить размер файла перед отправкой в ​​облако.

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

Спасибо

1 ответ

Решение

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

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

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

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