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

我发现贴近我正在寻找的post,但是我还没有能够成功地实现我想要的。 以下是一般stream程:

  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. 在GridFS中通过MongoDB存储Base64数据(我正在使用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 

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

您可以从MongoDB获取string,创build一个新的缓冲区实例,并在此时指定编码。 得到的缓冲区将是二进制数据。

 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); }); }); 

确保你的string是正确的。 这对我有用..

 var buf = new Buffer(b64stringhere, 'base64'); var express = require('express'), app = express(); app.get('/img', function(r, s){ s.end(buf); }) app.listen(80);