图片生成失败

在登录界面生成验证码时遇到问题,控制台能显示但客户端不显示图片。原因在于生成图片需要的临时文件夹不存在或权限问题。通过检查Tomcat的temp目录,发现删除temp文件夹后验证码图片能正常显示,但手动创建temp文件夹后又无法显示。问题可能与IDE(如IntelliJ IDEA和Eclipse)的项目部署方式有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在登录界面生成验证码的时候,控制台可以显示生成的验证码,但是在客户端登录界面不显示图片。

报错javax.imageio.IIOException: Can't create output stream!具体如下:

HTTP Status 500 – Internal Server Error
Type Exception Report

Message Can't create output stream!

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

javax.imageio.IIOException: Can't create output stream!
	javax.imageio.ImageIO.write(ImageIO.java:1574)
	com.hhit.servlet.CheckCodeServlet.doGet(CheckCodeServlet.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause

javax.imageio.IIOException: Can't create cache file!
	javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:423)
	javax.imageio.ImageIO.write(ImageIO.java:1572)
	com.hhit.servlet.CheckCodeServlet.doGet(CheckCodeServlet.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause

java.nio.file.AccessDeniedException: C:\Program Files (x86)\apache-tomcat-7.0.94\temp\imageio7316901718607827838.tmp
	sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
	sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
	sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
	sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
	java.nio.file.Files.newByteChannel(Files.java:361)
	java.nio.file.Files.createFile(Files.java:632)
	java.nio.file.TempFileHelper.create(TempFileHelper.java:138)
	java.nio.file.TempFileHelper.createTempFile(TempFileHelper.java:161)
	java.nio.file.Files.createTempFile(Files.java:897)
	javax.imageio.stream.FileCacheImageOutputStream.<init>(FileCacheImageOutputStream.java:88)
	com.sun.imageio.spi.OutputStreamImageOutputStreamSpi.createOutputStreamInstance(OutputStreamImageOutputStreamSpi.java:68)
	javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:419)
	javax.imageio.ImageIO.write(ImageIO.java:1572)
	com.hhit.servlet.CheckCodeServlet.doGet(CheckCodeServlet.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.

Apache Tomcat/7.0.94
原因:

百度找到原因,生成图片的时候要用到io流,会读取变量java.io.tmpdir!如果没有自定义路径,默认读取路径是tomcat下的temp文件夹。
当temp文件夹不存在时,就会出现”Can’t create output stream”。图片生成失败,无法正常显示。
只需要在Tomcat下创建temp文件夹即可。

解决方法

查看后发现我的Tomcat下存在temp文件夹。
便尝试删除temp文件夹
运行成功、图片正常显示。

疑惑

再次查看Tomcat目录,发现Tomcat并没有自动生成temp文件夹。
根据原理,应当不存在temp才会出错。
然而默认读取目录temp存在时反而出错,删除temp文件夹反而正确。
手动创建temp文件夹后,运行图片再次无法显示
我的开发工具是idea存在此问题,相同项目、Tomcat在eclipse正常。应该与idea、eclipse对JavaWEB项目部署方式有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值