【发布时间】:2014-05-06 10:41:37
【问题描述】:
我正在尝试上传从画布中提取并通过 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 代码中。
【问题讨论】:
-
我没有立即跳出来,但是你有没有比较 PHP 和 Node 的文件,看看是否有明显的区别?不同的长度,不同的数据?还有一个更简单的方法:
fs.writeFileSync('./img.jpeg', req.body.image.replace(/^data:image\/\w+;base64,/, ""), {encoding: 'base64'}) -
是的,我已经尝试过您指定的更简单的方法,而且我在 NodeJS 中获取了我的 base64 代码,将其写入文本文件,然后在我的 PHP 脚本中使用文本文件中的确切字符串,它奏效了
-
您能否上传一个小 jpg 并在问题中发布 base64 以及正在运行的 PHP 版本?
-
感谢@loganfsmyth 的支持,我找到了解决问题的方法,请查看我的回答
-
很好,很高兴你知道了。我能问一下你用什么来填充
req.body.image吗?你在使用 express bodyParser 吗?您如何填充 POST 数据客户端? Base64 不会将空格视为加号,但这种转换可能会在其他地方引入。
标签: image node.js base64 ajax-upload