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

标签 javascript node.js image base64 gridfs

我找到了与我正在寻找的内容相近的帖子,但我未能成功实现我想要的内容。这是一般流程:

  1. 提交带有其他 field 数据的照片,作为 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 在 GridFS 中存储 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

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

最佳答案

您可以从 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); 

  });
});

关于javascript - 使用 Node.js 将 Base64 图像转换为原始二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994881/

相关文章:

javascript - 自动播放无法在我的 Javascript Slider 上运行

javascript - Sencha touch 2.0 无法在视口(viewport)上设置 activeitem

javascript - Socket.io - 旧版本的 app.js 到新版本的 socket.io

javascript - Node.js 中依赖于版本的类型继承

javascript - 使用 Lodash 查找/过滤来自多个 parent 和多个 child 的数据

javascript - 如何在辅助函数中访问 Vuex 存储?

node.js - Passportjs - 如何使用 Google 策略请求用户的图像?

java - 使用 JCROP 和 JQUERY 从基于 jsp..url 的图像源/动态图像不工作来裁剪图像

java - JFrame 未全屏显示所有图像

image - 是否有使用 LoadPicture ("bmp_or_icon_file_path")在 Excel 2007 VBA 中加载图像的替代方法