我正在使用nodejs保存base64图像,它将图像保存在准确的路径中,但会显示错误。
请帮助我找到错误。
这是我的代码
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;
任何解决方案表示赞赏!
答案 0 :(得分:3)
您犯的错误是在创建缓冲区时未指定编码。您应该这样创建缓冲区:
new Buffer()
已过时,请改用Buffer.from()
。
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
但是不建议将图像作为base64字符串发送。它是 大图像处理效率低下。 base64所花的位比大约多33% 它的二进制等价物。我建议您检查一下: Upload base64 image with Ajax