服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java - Java Base64解码错误及解决方法

Java Base64解码错误及解决方法

2021-04-05 13:40Java教程网 Java

本篇文章给大家从一个Java Base64解码错误着手给大家分析了错误的原因以及解决办法,有兴趣的可以参考学习下。

问题提出:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
  }
}
?
1
java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit

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

解决办法:

IllegalArgumentException:非法参数异常,

试下这个,应该可以。

给你讲述下过程:

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

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

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

Java Base64解码错误及解决方法

?
1
2
3
4
5
6
7
try (OutputStream out = new FileOutputStream(newPath.toString())) {
      out.write(data);
    } catch (IOException e) {
      e.printStackTrace();
      throw new RuntimeException("异常是这么抛出的");
      //throw new RuntimeException(e);
    }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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();
  }

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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();
 }

 

延伸 · 阅读

精彩推荐