0

画像をクラウド (openstack、s3 など) に送信する前に (標準の html フォーム送信によってアップロードされた) 画像のサイズを変更する方法を探しています。

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) の間の転送を管理するプラグインを発見しましたが、クラウドに送信する前にファイルのサイズを変更する方法がわかりません。

誰かがそれを処理する方法を知っていますか?

ありがとう

4

1 に答える 1

0

ファイルからストリームを作成し、それを pkgcloud インスタンスでパイプするだけで、それを行う方法を見つけました。

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

このコードには欠落しています: すべての成功およびエラー コールバック。しかし、アイデアはここにあります。

于 2015-09-01T12:16:15.347 に答える