我知道这个问题被多次询问,但遗憾的是,似乎没有什么对我有用。
我将img的src发布到我的node / express。它看起来像这样:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JF ... UUUUAFFFFAH/2Q==
数据保存在图片中。我剪切了数据:image-stuff并获得了原始base64和文件类型。
var result = {
"type":"",
"data":""
}
var matches = picture.match(/^data:image\/([A-Za-z-+\/]+);base64,(.+)$/),response = {};
result.type = matches[1];
result.data = new Buffer(matches[2], 'base64');
require('fs').writeFile(mediaFolder+'/test.'+result.type, result.data, "binary", function(err){
res.status(500).send("error");
});
res.status(200).send("success");
当我尝试打开保存的图像时,它说:损坏或太大。我还尝试设置"二进制" writeFile方法中的参数。客户端始终获得200 http状态。
我不知道这有什么不对。我用在线解码器检查了原始base64字符串。它工作得很好。 我记录了每一个字符串/匹配,一切看起来都没问题。
任何帮助都可以解决这个问题 提前谢谢!
编辑:
这就是我发送图片的方式:
var base64Image = $('#show-picture').attr('src');
xmlhttp.open("POST","/webapp-ajax",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("picture="+base64Image);
答案 0 :(得分:7)
我认为您需要在发送到服务器之前使用encodeUriComponent(base64)
。
尝试发送JSON对象,并在客户端解析图像。
例如:
var mimeType = image.split(';')[0];
var base64 = encodeUriComponent(image.split(',')[1]);
var imageData = {
"mimeType" : mimeType,
"src" : base64
}
...
xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.send(imageData);