话不多说直奔主题,在使用ImageIO.write时报这个异常基本上都是在服务器上使用时遇到的,而本地确正常,那么重点就来了,服务器给本地部署明显的差别就是路径,这个异常其实大多数也是路径引起过(特殊的不考虑)
如果你报这个异常紧跟着下面还有javax.imageio.IIOException: Can't create cache file! 和 java.io.IOException: 系统找不到指定的路径。这两个异常那么就百分之百确定就是你路径的问题。在使用ImageIO.write方法时需要一个缓冲目录于合成图片缓冲用,而他默认的是tomcat下的temp目录,在本地你可能没有问题因为你不会删除这个temp目录而且没有权限限制,在服务端就不一样了,有些生产环境的tomcat,会将temp目录删除,还有就算你有这个目录,在服务端你很可能也没有权限给这个目录写入文件,所以以上异常就会出现。
解决方法,在你没有权限动服务器的情况下有这三种解决方法:
1. 使用ImageIO.setUseCache(false)来设置,更改缓冲策略,不使用文件目录缓存,使用内存缓存,反之参数传入true则是使用文件目录缓存。
2. 使用ImageIO.setCacheDirectory(绝对路径); 替换默认的缓冲目录,这个绝对路径要保证你有读写权限并且存在的路径。
3. 还有一种不使用ImageIO的write方法,换成其它JDK方法
把ImageIO.write(buffImg, "jpg", os); 换成: JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); encoder.encode(buffImg);
另外如果你能动服务器那就更好办,在tomcat下新建temp目录; 并开启temp目录的读写权限(开权限就不多说直接文件夹右键属性面设置)