如何解码base64到Node.js中的图像文件?

DaT*_*ebe 1 javascript base64 image node.js express

我知道这个问题被多次询问,但遗憾的是,似乎没有什么对我有用.

我将img的src发布到我的node/express.它看起来像这样:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JF ... UUUUAFFFFAH/2Q==
Run Code Online (Sandbox Code Playgroud)

数据保存在图片中.我剪切了数据: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");
Run Code Online (Sandbox Code Playgroud)

当我尝试打开保存的图像时,它说:损坏或太大.我还尝试在writeFile方法中设置"binary"参数.客户端始终获得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);
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 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);
Run Code Online (Sandbox Code Playgroud)