ストリームを使用して 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);
}