私はMongoDBコレクションに小さなサムネイルを保存しています。私は.findOne()
でそれらを抽出することができますが、私はそれらをExpressJSルートを介して正しく戻すことはできません。NodejでMongodbに保存されている画像を取得する
私はheroku環境が永続ストレージを保証しないため、親指をディスクに保存していません。 GridFSを使用していないのは、親指が< 16MBなのでです。このようにオブジェクトを返しますconsole.log
router.get('/pictures/:picture', function(req, res){
/* my filename is actually a mdb oid */
var filename = req.params.picture;
MongoClient.connect(url, function(err, db){
db.collection('myimages')
.findOne({'_id': ObjectId(filename)}, function(err, results){
console.log(results); //<-- Output below
res.setHeader('content-type', results.contentType);
res.send(results.img);
});
});
});
nodejs:
MongoClient.connect(url, function(err, db){
var newImg = fs.readFileSync(req.file.path);
var encImg = newImg.toString('base64');
var newItem = {
description: req.body.description,
date: Date(),
contentType: req.file.mimetype,
size: req.file.size,
img: Buffer(encImg)
};
db.collection('myimages')
.insert(newItem, function(err, result){
if (err) { console.log(err); }
});
});
は、私はこのようなExpressjsルート上img
を提供することができます:コレクションにAA新しい文書を挿入
はこのような何かを行きます、
{ _id: 58f7ab923b7c842023cf80ec,
description: '',
date: 'Wed Apr 19 2017 13:25:22 GMT-0500 (CDT)',
contentType: 'image/jpeg',
size: 648436,
img:
Binary {
_bsontype: 'Binary',
sub_type: 0,
position: 864584,
buffer: <Buffer 2f 39 6a 2f 34 41 41 51 53 6b 5a 4a 52 67 41 42 41 51 41 41 53 41 42 49 41 41 44 2f 34 51 50 38 52 58 68 70 5a 67 41 41 54 55 30 41 4b 67 41 41 41 41 ... > }
}
しかし、ブラウザの短所OLEは私にこのようなエラーを与える:
Resource interpreted as Document but transferred with MIME type image/jpeg: "http://localhost:3000/picturewall/58f7ab923b7c842023cf80ec".
は私が間違ってunencodingのですか? res
ヘッダーを間違って設定していますか?
私が間違っていることを誰かに見せてもらえますか?
'res.send(results.img);の代わりに' res.send(results.img.buffer); 'を試してください。 –
私はちょうどこれを試してみましたが、残念なことに(と少し驚いたことに)、違いはありませんでした。別のエラーでもありません。 – Colin
'curl localhost:3000/picturewall/...'を実行し、ブラウザのスクリーンショットではなくコンソールからの応答を貼り付けることもできますか? –