javax.imageio.IIOException: Can‘t create output stream!(验证码图片不显示)

简介: javax.imageio.IIOException: Can‘t create output stream!(验证码图片不显示)

问题


今天遇到个很怪的问题,在机房电脑运行代码时,验证码图片可以生成,回来在自己的电脑运行就不可以了,验证码图片加载不出现,单独访问生成验证码的CheckCodeServlet时,报了下面的错误(在机房是可以访问的)。


HTTP状态 500 - 内部服务器错误
类型 异常报告
消息 Can't create output stream!
描述 服务器遇到一个意外的情况,阻止它完成请求。
例外情况
javax.imageio.IIOException: Can't create output stream!
  javax.imageio.ImageIO.write(ImageIO.java:1574)
  com.neuedu.his.controller.CheckCodeServlet.doPost(CheckCodeServlet.java:85)
  com.neuedu.his.controller.CheckCodeServlet.doGet(CheckCodeServlet.java:89)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  com.neuedu.his.filter.LoginFilter.doFilter(LoginFilter.java:57)
  com.neuedu.his.filter.CharsetFilter.doFilter(CharsetFilter.java:37)
  com.neuedu.his.filter.Filter1.doFilter(Filter1.java:29)
根本原因。
javax.imageio.IIOException: Can't create cache file!
  javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:423)
  javax.imageio.ImageIO.write(ImageIO.java:1572)
  com.neuedu.his.controller.CheckCodeServlet.doPost(CheckCodeServlet.java:85)
  com.neuedu.his.controller.CheckCodeServlet.doGet(CheckCodeServlet.java:89)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  com.neuedu.his.filter.LoginFilter.doFilter(LoginFilter.java:57)
  com.neuedu.his.filter.CharsetFilter.doFilter(CharsetFilter.java:37)
  com.neuedu.his.filter.Filter1.doFilter(Filter1.java:29)
根本原因。
java.nio.file.AccessDeniedException: D:\Program Files\apache\apache-tomcat-8.5.60\temp\imageio8447768555205008617.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.neuedu.his.controller.CheckCodeServlet.doPost(CheckCodeServlet.java:85)
  com.neuedu.his.controller.CheckCodeServlet.doGet(CheckCodeServlet.java:89)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  com.neuedu.his.filter.LoginFilter.doFilter(LoginFilter.java:57)
  com.neuedu.his.filter.CharsetFilter.doFilter(CharsetFilter.java:37)
  com.neuedu.his.filter.Filter1.doFilter(Filter1.java:29)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看
Apache Tomcat/8.5.60

分析


报错的的核心三句:


javax.imageio.IIOException: Can't create output stream!
javax.imageio.IIOException: Can't create cache file!
java.nio.file.AccessDeniedException: D:\Program Files\apache\apache-tomcat-8.5.60\temp\imageio8447768555205008617.tmp

大概意识就是:


没有办法创建输出流

没有办法创建缓冲文件

没有办法在D:\Program Files\apache\apache-tomcat-8.5.60\temp目录生成imageio8447768555205008617.tmp文件


一般碰到 Can't create output stream!的问题就是我们的tomcat下面没有temp文件夹,因为ImageIO默认使用的缓存目录是tomcat下面的temp文件夹,而我有这个文件夹,但是还没办法生成缓存文件,我试了下,是因为我的D盘有权限问题,需要管理员权限才能创建文件所以没办法生成缓存文件。


解决方案


1.在tomcat文件夹里创建个temp文件夹


没有这个文件夹自然无法存放缓存文件,因为默认的是存放在这个文件夹。


2.添加ImageIO.setUseCache(false);语句


因为ImageIO默认是使用缓存目录,可以通过ImageIO.setUseCache(false)来设置,更改缓存策略,不使用文件目录缓存,使用内存缓存。

相关文章
|
机器学习/深度学习 缓存 Java
javax异常: javax.imageio.IIOException: Can't create output stream解决方法
javax异常: javax.imageio.IIOException: Can't create output stream解决方法
|
5月前
|
存储 缓存 测试技术
开发文档的模版(参考)
本文档为[模块名称]的开发文档,详细介绍了系统模块的数据库表结构设计、接口定义、关键设计方案及外部API集成等内容,涵盖了核心表、从表、废弃表的设计规范,以及接口请求方式、参数说明、响应格式和异常处理机制。
401 0
|
SQL Java Maven
idea如何建立一个springboot项目
idea如何建立一个springboot项目
312 0
|
关系型数据库 MySQL 应用服务中间件
站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站
站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站
538 3
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
401 0
|
运维 Cloud Native 云计算
云原生技术在现代企业中的应用与挑战
随着云计算技术的不断成熟,云原生技术已成为推动企业数字化转型的重要力量。本文将深入探讨云原生技术的核心概念、优势以及在现代企业中的应用案例,并分析企业在实践中可能遇到的挑战和解决策略。通过对比传统IT架构与云原生架构的差异,揭示云原生技术如何助力企业实现更高效的资源利用、更快的迭代速度和更强的业务连续性。同时,文章还将提供一系列实施云原生技术的最佳实践,旨在为企业决策者和技术人员提供实用的参考和指导。
185 25
|
数据采集 开发者 Python
Python正则表达式之re.compile函数
`re.compile`是Python正则表达式处理中一个强大的工具,它通过预先编译正则表达式,不仅提升了执行效率,还增强了代码的组织性和可读性。掌握其使用,对于涉及文本分析、数据清洗、日志处理等领域的Python开发者来说,是非常必要的技能。正确并高效地应用这一功能,可以显著提升程序的性能和维护性。
982 0
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
639 2
|
人工智能 芯片
合肥中科深谷嵌入式项目实战——人工智能与机械臂(一)
合肥中科深谷嵌入式项目实战——人工智能与机械臂(一)
|
NoSQL JavaScript 前端开发
报错场景:ant design vue前端登录时,输入的验证码是对的,但是一直提上验证码错误,登录不进去 报错信息(Error in execution; nested exception)
报错场景:ant design vue前端登录时,输入的验证码是对的,但是一直提上验证码错误,登录不进去 报错信息(Error in execution; nested exception)
844 0