好多人,用java输出验证码喜欢用
<div class="iteye-blog-content-contain" style="font-size: 14px">
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
- encoder.encode(image);
</div>
但是如果你用oracle 1.637 以后的jdk 1.6或者用jdk 1.7.x你会发现JPEGCodec,JPEGImageEncoder 已经无法导入了;
其实在oracle 收购sun 之后有了 import javax.imageio.ImageIO; 这个方法来替代原来的方法;不过如果直接用
ImageIO.write(image, "JPEG", response.getOutputStream());
一般情况下不会出现问题,但是有的时候你会发现会出现一个异常:
javax.imageio.IIOException: Can't create output stream!
at javax.imageio.ImageIO.write(ImageIO.java:1521)
这个问题出现的原因,是你吧tomcat (或者其他web容器)的缓存目录给删掉了,所以写图片文件的时候会发生IO读写错误,
解决的办法有:
1. ImageIO.setUseCache(true); //不使用缓存
2.[java] view plaincopy
- ImageIO.setUseCache(true);
- ImageIO.setCacheDirectory(CommonToolsUtil.checkFileDir(FileContents.CATCHPATH));
- ImageIO.write(image, "JPEG", response.getOutputStream());// 将内存中的图片通过流动形式输
自己手动指定缓存目录
3.
就是把删掉的web容器的缓存目录加上。