关于javascript:如何将base64解码为Node.js中的图像文件?

How to decode base64 to image file in Node.js?

我知道这个问题已经被问过几次了,但是不幸的是,似乎没有什么对我有用。

我将img的src发布到我的节点/表达式。看起来像这样:

1
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JF ... UUUUAFFFFAH/2Q==

数据保存在图片中。我剪切了data:image-stuff并得到了原始的base64和文件类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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方法中设置" binary"参数。客户端始终获得200 http状态。

我不知道这是怎么了。我用在线解码器检查了原始的base64字符串。效果很好。
我记录了每个字符串/匹配项,一切对我来说都还不错。

任何帮助都可以解决这个问题。
在此先感谢!

编辑:

这是我发送图片的方式:

1
2
3
4
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);


我相信您需要在发送到服务器之前使用encodeUriComponent(base64)

尝试发送JSON对象,并在客户端解析图像。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);