我正在尝试上传图片并在Base64 encoding & decoding
如下
解码
if (imgString != null ) {
BufferedImage image = null;
byte[] imageByte;
BASE64Decoder decoder = new BASE64Decoder();
imageByte = decoder.decodeBuffer(imgString);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();
String realPath = request.getSession().getServletContext().getRealPath("/resources/images/"+studentDetails.getFirstname()+".png");
File outputfile = new File(realPath);
ImageIO.write(image, "png", outputfile);
studentDetails.setStuImg(outputfile.toString());
}
解码时我有时会遇到以下异常
2018年5月27日下午3:04:27 org.apache.catalina.core.StandardWrapperValve调用 严重:servlet [spring]的Servlet.service()在路径[/ campasAdmin]的上下文中引发异常[Handler dispatch failed;嵌套异常是java.lang.OutOfMemoryError:带有根本原因的Java堆空间 java.lang.OutOfMemoryError:Java堆空间
编码
if (imagePath != null && imagePath.length() > 0) {
byte[] bytes = Files.readAllBytes(Paths.get(imagePath));
encodedFile = Base64.getEncoder().encodeToString(bytes);
}
它有什么解决方案?我该如何避免呢?
答案 0 :(得分:0)
它有什么解决方案?我该如何避免呢?
两种可能的方法:
除非您的图像很大,否则您应该能够在内存中保留像素和base64格式的图像......几次。
用于读取和写入图像的代码将整个图像加载到内存中,然后将其写出。你不需要这样做。相反,你可以用clunks处理它:
链接的Q& A提供了一些如何执行此操作的说明。