使用Node.js将Base64图像转换为原始二进制文件

时间:2013-09-25 01:47:11

标签: javascript node.js image base64 gridfs

我发现的帖子与我正在寻找的内容很接近,但我无法成功实现我想要的内容。以下是一般流程:

  1. 使用其余的场地数据提交照片,作为base64数据
  2. 剥离数据前缀(如果存在),因此我只有图像base64数据

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

    1. 通过MongoDB在GridFS中存储Base64数据(我正在使用gridfstore
    2. 然后,我想通过URL将请求的图像作为原始图像文件检索。

    3. // 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字节。我尝试了其他方法,但它们没有返回原始图像。

      我想使用以下网址提取图片:

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

      以下是浏览器跟踪的屏幕截图: browser trace

2 个答案:

答案 0 :(得分:15)

您可以从MongoDB获取字符串,创建新的缓冲区实例,并在执行此操作时指定编码。结果缓冲区将是二进制数据。

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

所以在你的实现中:

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

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

  });
});

答案 1 :(得分: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);