一个java项目,前端将图片转成base64的字符串,后端拿到字符串重新转换为图片并保存到本地,但是保存到本地的图片打开时却出现错误,以下是实现代码,代码中的base64字符串,是直接从网上的在线将图片转为base64转换的,可以使用任意图片import java.io.FileOutputStream;
import java.io.OutputStream;import sun.misc.BASE64Decoder;public class Base64ToImg {
public static void base64ToFile(String base64)throws Exception{
BASE64Decoder decoder = new sun.misc.BASE64Decoder();
        byte[] bytes1 = decoder.decodeBuffer(base64);
        OutputStream out=new FileOutputStream("E://a.jpg");
        out.write(bytes1);
        out.flush();
        out.close();
    }
public static void main(String[] args) {
try {
                       //此处放base64字符串
String base64="";
base64ToFile(base64);
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果如图:

解决方案 »

  1.   

    前端 你是如何用base64加密的 ?还是用的base64encoder 加密的吗?如果不是,那么这就是造成你上述问题的原因如果是 那么可能你是接受字符串的时候 字符串被平台处理了  那样就会造成文件丢失
      

  2.   

    感谢大哥!我把base64字符串拷到编辑器里,然后写入图片文件中,也是打不开。看了大哥这个解释后,我从图片中转base64字符串出来,在写到文件中就好了。
      

  3.   

    Base64 的图片还有一些前缀信息,例如 data:image/jpg;base64,,这个需要在保存图片的时候去掉
      

  4.   

    感谢大哥!我把base64字符串拷到编辑器里,然后写入图片文件中,也是打不开。看了大哥这个解释后,我从图片中转base64字符串出来,在写到文件中就好了。
      

  5.   

    我也遇到了这样的问题,我是Android端,后台收到的图片打开就是提示错误。
    你描述的解决办法,没听明白,哈哈哈,能具体点吗
      

  6.   

    base64字符有个前缀,要截取掉。你打印下就看的到了
      

  7.   

    如果发现去掉 “data:image/jpg;base64, ”之后,文件还是破损的或者下面这种情况,注意看一下 base64编码中的"+"号是不是被替换成""了,如果是则需要替换回来。完成以上两个地方的检查问题就不大了。特此感谢“https://blog.csdn.net/weixin_41162263/article/details/81876346