首页 > 编程 > Java > 正文

Java Base64解码错误及解决方法

2019-11-26 10:15:40
字体:
来源:转载
供稿:网友

问题提出:

自己在做一个小网站充当练手,但是前端图片经过base64加密后传往后端在解码。但是一直都有问题,请大神赐教

  public static String base64ToImg(String src) throws IOException {    String uuid = UUID.randomUUID().toString();    StringBuilder newPath = new StringBuilder(IMG_ROOT_PATH);    newPath.append(separator).        append(uuid).        append(IMG_SUFFIX);    if(src == null){      return null;    }    byte[] data = null;    Base64.Decoder decoder = Base64.getDecoder();    try (OutputStream out = new FileOutputStream(newPath.toString())) {      data = decoder.decode(src);      out.write(data);      return newPath.toString();    } catch (IOException e) {      throw new IOException();    }  }
java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit

以上是相关的异常信息。我试图将前端的base64码粘贴到记事本然后自己在试着解码,也是同样问题。

解决办法:

IllegalArgumentException:非法参数异常,

试下这个,应该可以。

给你讲述下过程:

去了stackoverflow,debug。最后发现data为null,,加油吧,我们需要学的还很多

下次遇到问题debug下,看是哪条代码出现问题了,通过回答你,我也学到了很多

关键点在这里: throw new IOException();

try (OutputStream out = new FileOutputStream(newPath.toString())) {      out.write(data);    } catch (IOException e) {      e.printStackTrace();      throw new RuntimeException("异常是这么抛出的");      //throw new RuntimeException(e);    }
public static String base64ToImg(String src) throws IOException {    String uuid = UUID.randomUUID().toString();    StringBuilder newPath = new StringBuilder("xx");    newPath.append("xx").        append(uuid).        append("xx");    if (src == null) {      return null;    }    byte[] data = Base64.getDecoder().decode(src);    try (OutputStream out = new FileOutputStream(newPath.toString())) {      out.write(data);    } catch (IOException e) {      e.printStackTrace();    }    return newPath.toString();  }

补充另外一种常用关闭资源:

 public static String base64ToImg(String src) throws IOException {    String uuid = UUID.randomUUID().toString();    StringBuilder newPath = new StringBuilder("xx");    newPath.append("xx").        append(uuid).        append("xx");    if (src == null) {      return null;    }    byte[] data = null;    OutputStream out = null;    Base64.Decoder decoder = Base64.getDecoder();    try {      out = new FileOutputStream(newPath.toString());      data = decoder.decode(src);      out.write(data);    } catch (IOException e) {      e.printStackTrace();    } finally {      if (out != null) {        out.close();      }    }    return newPath.toString();  }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表