用node.js接受前端传过来的base64图片,怎办保存在后台?

        //过滤图片url
        let base64 = imgSrc.replace(/^data:image\/\w+;base64,/, "")
        //把图片转换成buffer对象
        let dataBuffer = new Buffer(base64, 'base64')
        //保存图片的地址是
        let path = 'static/upload/image'+'.jpg'
        //保存图片
        fs.writeFile(path,dataBuffer,(err) => {
            if(err) {
                console.log(err)
            }else {
                console.log('保存图片成功')
            }
        })

我的做法:
1.首先将base64图片的url过滤掉前面的data:image...字符串
2.将过滤的图片转为二进制
3.用fs保存到后台

但是保存成功后的图片无法解析(如图),那我怎么在前端再获取图片呢?
这样前端获取的图片就显示不出来了,因为图片无法解析。是不是我保存的方式不对,要怎么做?

clipboard.png

阅读 6.1k
3 个回答

已经找到图片无法解析的原因了,base64编码,使用express接收POST值后,base64编码字符串中的“+”号被替换成空格了,引起编码出错,img.src = base64Data;直接把nodejs服务挂掉。如果你出现类似问题,请console.log(base64Data);看字符串是否有空格。

解决办法:

将空格替换回“+”号

var base64Data = imgData.replace(/s/g,"+");

1。硬要使用base64保存的话,就不需要再转化到二进制了,直接保存base字符串。
2。因为你如果要上传图片,为什么要把图片编码之后再上传最后又解码?,这样就很皮。
如2。所述,只需要编码和解码,不包括转化为2进制,所以你的操作得不到最后的jpeg图片

推荐问题
宣传栏