在NodeJS中从base64字符串创建图像
我正尝试上传一张图片,该图片从我的画布中提取,并通过ajax发布,并且无法在服务器端创建图像文件。
我有这样的回答:https://stackoverflow.com/a/7347358/1358670但我仍然在这里或那里错过了一些东西。
这是我的JavaScript(浏览器)代码:
var img = myCanvas.toDataURL("image/jpeg");
// ajax request to send the image
在服务器端,我执行以下操作:
var fd = fs.openSync('./img.jpeg', 'w');
req.body.image = req.body.image.replace(/^data:image/w+;base64,/, "");
console.log( req.body.image );
var buff = new Buffer(req.body.image, 'base64');
fs.write(fd, buff, 0, buff.length, 0, function(err,written){
console.log( ">> "+ err );
fs.closeSync( fd );
});
正如你所看到的,我已经记录了图像,看它是否被正确发送,而且它是,但我仍然无法打开创建的img.jpeg文件
任何帮助或暗示都非常受欢迎。
编辑
我也试过这里的解决方案:https://stackoverflow.com/a/6933413/1358670但我仍然有同样的问题
编辑:2
我已经测试了我的前端,在服务器端使用了PHP脚本,生成的图像非常好,所以我会断定问题出在我的NodeJS代码中。
问题出在NodeJS的处理上,我没有怀疑这些代码,因为每个人都在评论它为它工作的地方是一样的,没有什么不同,所以我没有怀疑这个过程,但是做错了什么。
当在我的PHP脚本中检查它时,我发现一个不在NodeJS代码中的步骤,这里是PHP代码:
$img = $_POST[ 'image' ];
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = "./". uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
区别在于: str_replace(' ', '+', $img);
我不知道它是如何为其他人工作的,但是对于我来说,用base64替换每个空间,解决了我的问题。
新的NodeJS代码
req.body.image = req.body.image.replace(/^data:image/w+;base64,/, "");
req.body.image = req.body.image.replace(/ /g, '+');
console.log( req.body.image );
var buff = new Buffer(req.body.image, 'base64');
fs.write(fd, buff, 0, buff.length, 0, function(err,written){
console.log( ">> "+ err );
fs.closeSync( fd );
});
我希望这会帮助别人
更好的代码版本:
req.body.image = req.body.image.replace(/^data:image/jpeg+;base64,/, "");
req.body.image = req.body.image.replace(/ /g, '+');
fs.writeFile('./records/'+model+'/out.jpeg', req.body.image, 'base64', function(err) {
console.log(err);
});
链接地址: http://www.djcxy.com/p/78387.html