3

ストリームを使用して Node.js/Express/gridfs-stream/multiparty で Mongodb GridFS にアップロードされた画像を保存しています。正常に動作します。

データベースに保存する前に、画像を標準形式に「正規化」(サイズ変更) したいと思います。

  • gm https://github.com/aheckmann/gmを使用してストリーミングすることもできますが、ネイティブの ImageMagic (オプションではない) をインストールする必要があります。
  • lwip https://github.com/EyalAr/lwipのようなものを使用して「純粋なノード」をセットアップしますが、ストリーミングを行うことはできません

外部ライブラリをインストールせずに、ストリーミング ソリューションをリクエスト -> サイズ変更 -> GridFS に保存するソリューションはありますか?

現在の解決策(サイズ変更ステップがありません):

function storeImage(req, err, succ){
  var conn = mongoose.connection;
  var gfs = Grid(conn.db);
  var context = {};

  var form = new multiparty.Form();

  form.on('field', function(name, value){
    context[name] = value;
    console.log(context);
  });

  form.on('part', function(part){
    // handle events only if file part
    if (!part.filename) { return; }

    var options =
    {
      filename: part.filename,
      metadata: context,
      mode: 'w',
      root: 'images'
    };
    var ws = gfs.createWriteStream(options);

    // success GridFS
    ws.on('close', function (file) {
      console.log(file.filename + file._id);
      succ(file._id);
    });

    // error GridFS
    ws.on('error', function (errMsg) {
      console.log('An error occurred!', errMsg);
      err(errMsg);
    });

    part.pipe(ws);
  });

  // Close emitted after form parsed
  form.on('close', function() {
    console.log('Upload completed!');
  });

  form.parse(req);

}
4

1 に答える 1