Java Base64解码错误

自己在做一个小网站充当练手,但是前端图片经过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码粘贴到记事本然后自己在试着解码,也是同样问题。

阅读 13.1k
1 个回答

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();
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题