我正在使用 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;
感谢任何解决方案!
最佳答案
你犯的错误是当你创建一个缓冲区时你没有指定编码。你应该像这样创建缓冲区:
new Buffer()
is deprecated useBuffer.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/