2016-09-26 12 views
1

私のサーバーにではなくデータベースにイメージを保存します。Express jsでbase64をmongooseに直接保存するには

これは私のモデル

var mongoose = require('mongoose'); 

VARスキーマ= mongoose.Schemaです。

var categorySchema = new Schema({ 
    img: { data: Buffer, contentType: String }, 
}); 

module.exports = mongoose.model('Category', categorySchema); 

私のルーターでは、長い文字列でこのbase64イメージを取得しています。

私はこれまで私のmongoose dbデータベースにこの情報を保存する方法を知りたいと思います。

router.post('/add', function (req, res) { 

var category = new Category(); 
category.img.data = req.body.category.img; 

category.img.contentType = 'image/png'; 

category.save(function (err) { 
    if (err) throw new Error(err); 
    res.sendStatus(200) 
}); 

});

しかし、明らかにそれが動作していない私はこのエラーが表示されます。

Error: ValidationError: CastError: Cast to Buffer failed for value "{ '$ngfDataUrl': 'data:image/png;base64, long-String'} 

私はファイルを保存しています。

答えて

2

実際には、リクエスト本体からbase64文字列を取り出して保存します。

req.body.category.img{ '$ngfDataUrl': 'data:image/png;base64,long-String' }と等しく、ここでlong-Stringは画像のbase64表現ですか?

もしそうなら、このような何か:私はこのエラーを推測

const category = new Category(); 

const img = req.body.category.img; 

const data = img['$ngfDataUrl']; 
const split = data.split(','); // or whatever is appropriate here. this will work for the example given 
const base64string = split[1]; 
const buffer = Buffer.from(base64string, 'base64'); 

category.img.data = buffer; 

// carry on as you have it 
+0

奇妙に。 base64は関数ではありません – user3862830

+0

私は同じエラーがあります。行を '新しいバッファ(base64string、" base64 ")'に変更する –

関連する問題