11

探しているものに近い投稿を見つけましたが、必要なものをうまく実装できませんでした。一般的な流れは次のとおりです。

  1. base64 データとして、残りの会場データを含む写真を送信します
  2. データプレフィックスが存在する場合は削除するため、画像のbase64データのみが得られます

var base64data = venue.image.replace(/^data:image\/png;base64,|^data:image\/jpeg;base64,|^data:image\/jpg;base64,|^data:image\/bmp;base64,/, '');

  1. MongoDB 経由で Base64 データを GridFS に保存します (私はgridfstoreを使用しています)
  2. 次に、リクエストに応じて、URL を介して生の画像ファイルとして画像を取得したいと思います。

// generic images route
server.get(version+'/images/:id', function(req, res) {
  gridfstore.read( req.params.id, function(error,data) {
    res.writeHead(200, {
      'Content-Type': 'image/jpeg',
      'Content-Length': data.buffer.length
    });

    res.end(data.buffer);
  });
});

基本的に、このメソッドは GridFS に格納されている Base64 バイトを返します。他の方法を試しましたが、生の画像が返されません。

次のような URL を使用して画像を取得したいと思います。

http://[localhost]/1/images/11dbcef0-257b-11e3-97d7-cbbea10abbcb

ブラウザ トレースのスクリーンショットを次に示します。 ブラウザのトレース

4

2 に答える 2

16

MongoDB から文字列を取得し、新しいバッファー インスタンスを作成し、その際にエンコーディングを指定できます。結果のバッファはバイナリ データになります。

var b64str = /* whatever you fetched from the database */;
var buf = Buffer.from(b64str, 'base64');

したがって、実装では:

server.get(version+'/images/:id', function(req, res) {
  gridfstore.read(req.params.id, function(err, data) {
    var img = Buffer.from(data.buffer, 'base64');

    res.writeHead(200, {
      'Content-Type': 'image/jpeg',
      'Content-Length': img.length
    });
    res.end(img); 

  });
});
于 2013-09-25T01:58:52.757 に答える
0

文字列が正しいことを確認してください。これは私のために働いた..

var buf = new Buffer(b64stringhere, 'base64');
var express = require('express'), app = express();
app.get('/img', function(r, s){
    s.end(buf);
})
app.listen(80);
于 2013-09-25T23:06:18.680 に答える