java.io.IOException: 磁盘空间不足(导致验证码无法显示)

YOYOOOP 2008-12-29 05:03:21
我采用以下代码来生成验证码:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("image/jpeg");

//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// String module =request.getParameter("module");
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();

//生成随机类
Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));

//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}

// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}

// 将认证码存入SESSION
request.getSession().setAttribute("vcode",sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());

}

1小时以前都是好的。刚才我访问的时候突然发现验证码无法显示。
后台日志里面:
java.io.IOException: 磁盘空间不足。
at java.io.RandomAccessFile.writeBytes(Native Method)
at java.io.RandomAccessFile.write(Unknown Source)
at javax.imageio.stream.FileCacheImageOutputStream.write(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(Unknown Source)
at javax.imageio.ImageWriter.write(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at com.sideline.util.ImageServlet.doGet(ImageServlet.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)



请问该 怎么解决。希望得到高手们的帮助.谢谢啦~~

可以访问:http://www.cqjzw8.com看看情况。。就是顶部的登录的验证码无法显示。。其它页面的验证码同样都无法显示。。

再次感谢......
...全文
1164 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
montao 2008-12-30
  • 打赏
  • 举报
回复
注意你生成验证码里面关于文件读写和流操作的关闭。

然后再检查一下你服务器那个盘是不是真的没空间了?
qqqqqwwqqq 2008-12-30
  • 打赏
  • 举报
回复
显示没问题啊
joejoe1991 2008-12-30
  • 打赏
  • 举报
回复
我也出现这问题了,不解。。。
haodouzhe123x 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 montao 的回复:]
注意你生成验证码里面关于文件读写和流操作的关闭。

然后再检查一下你服务器那个盘是不是真的没空间了?
[/Quote]

可能是你自己本身的机器配置太差的缘故,如果及时关闭掉不必要的连接,在服务器上,不可能出现这样的情况的!
hbwhwang 2008-12-29
  • 打赏
  • 举报
回复
ImageServlet.java:89
是哪行?
HuanxueOrSeaty 2008-12-29
  • 打赏
  • 举报
回复
帮up
glglglglglgllll 2008-12-29
  • 打赏
  • 举报
回复
没遇到过,帮你顶
zou_wei_forever 2008-12-29
  • 打赏
  • 举报
回复
可能要生成临时文件
YOYOOOP 2008-12-29
  • 打赏
  • 举报
回复
我想问用我的这种生成验证码的方式还需要占空间呀?
需要得到高手的指点
YOYOOOP 2008-12-29
  • 打赏
  • 举报
回复
我觉得奇怪。。。。。。
zou_wei_forever 2008-12-29
  • 打赏
  • 举报
回复
可以显示啊!
YOYOOOP 2008-12-29
  • 打赏
  • 举报
回复
YOYOOOP 2008-12-29
  • 打赏
  • 举报
回复
补充一下:
生成验证码的代码为:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("image/jpeg");

//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// String module =request.getParameter("module");
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();

//生成随机类
Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));

//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}

// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}

// 将认证码存入SESSION
request.getSession().setAttribute("vcode",sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());

}

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧