问题提出:
自己在做一个小网站充当练手,但是前端图片经过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:非法参数异常,
试下这个,应该可以。
给你讲述下过程:
去了*,debug。最后发现data为null,,加油吧,我们需要学的还很多
下次遇到问题debug下,看是哪条代码出现问题了,通过回答你,我也学到了很多
关键点在这里: throw new IOException();
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();
}
|