node.js - 如何使用 Node js保存base64图像?

标签 node.js express

我正在使用 nodejs 保存 base64 图像,它将我的图像保存在确切的路径,但显示错误。

请帮我找出错误。

enter image description here

这是我的代码

var express = require('express');
var router = express.Router();

const fs = require('fs');
const mime = require('mime');


const path = './uploads';

router.post('/register', (req, res, next) => {
  const base64Image = req.body.image;

  const matches = base64Image.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
  response = {};
  if (matches.length !== 3) {
    return new Error('Invalid input String');
  }

  response.type = matches[1];
  response.data = new Buffer(matches[2]);
  let decodedImg = response;
  let imageBuffer = decodedImg.data;
  let type = decodedImg.type;
  let extension = mime.extension(type);
  let fileName = 'image.' + extension;

  try {
    fs.writeFileSync(path + '/' + fileName, imageBuffer, 'utf8');
    return res.send({ status: 'success' });
  } catch (e) {
    next(e);
  }

  return;

});

module.exports = router;

感谢任何解决方案!

最佳答案

你犯的错误是当你创建一个缓冲区时你没有指定编码。你应该像这样创建缓冲区:

new Buffer() is deprecated use Buffer.from() instead.

let buff = Buffer.from(m[2],'base64');//编码类型base64

基本代码片段

const fs =  require('fs')
let a =  'base64ImageString'
let m =  a.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
  
let b =  Buffer.from(m[2],'base64');
fs.writeFile('image.png',b,function(err){
  if(!err){
    console.log("file is created")
  }
});

此外,当您将缓冲区写入文件时,您不必传递编码类型,但如果写入字符串,则必须传递。

查看此演示 https://repl.it/repls/GrimOfficialLocations

But it is not advised to send an image as base64 string. It is inefficient for large images. base64 roughly takes 33% more bits than its binary equivalent. I recommend you to check this out: Upload base64 image with Ajax

关于node.js - 如何使用 Node js保存base64图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60074775/

相关文章:

javascript - 从 when.js 迁移到 ES6 Promise

node.js - MongoDB Mongoose 按日期范围查询深层嵌套的子文档数组

javascript - anchor 标记没有调用 React 中的 onClick 函数

node.js - Socket.IO 错误 'listen()' 方法在迁移到 Express 3.0 后需要一个 'http.Server' 实例

javascript - 护照 js req.user 在 req.login 后不可用

javascript - Eslint 不尊重 jsconfig 路径

node.js - 无法从 Breeze 工作中获取 Todo-AngularJS-Sequelize 示例

node.js - 如何使用带有 JWT 的 Node 、ws 和通行证来使用身份验证 Web 套接字?

javascript - 为 Postgresql tswtz 数据类型生成带有时区的服务器端时间戳

javascript - NodeJs/Formidable,上传图片错误