
request.setCharacterEncoding("UTF-8")
response.setContentType("image/jpeg")
response.getOutputStream().write(bytes)
这几个参数是把这个图片直接发给浏览器,说白了就直接把图片当成文件让浏览器下载。
解决办法:
<img border=0 src="localhost:8080/Pic" />
localhost:8080是你配置WEB.XML
Pic是你的Servlet类名。
我直接把做验证码的代码发出来了。如果你不是要做验证码。那你自己看下就知道你问题的答案了。//清空浏览器缓存。确保验证图片更换
response.setHeader("Cache-Control","no-cache")
response.setHeader("Pragma", "no-cache")
response.setDateHeader("Expires", -1)
//以图片形式打开数据
response.setHeader("Content-Type","image/jpeg")
//response.setContentType("image/jpeg")
//在内存中创建一副图片
BufferedImage image=new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB)
//在图片上写数据
Graphics g=image.getGraphics()
g.setColor(Color.black)
//画个宽为80.、高30的实心矩形刚好将图片遮盖
g.fillRect(0, 0, 80, 30)
//设置图片上字体的颜色及格式
g.setColor(Color.red)
g.setFont(new Font("宋体",Font.BOLD,20))
//将字体写入图片
String num=makeNum()
//将字串保存到session中
request.getSession().setAttribute("checkcode", num)
//写字符串。坐标是从基线为准。
g.drawString(num, 0, 20)
//将图片输出给浏览器。参数分别为要写入的 RenderedImage。 包含格式非正式名称的 String。 将在其中写入数据的 OutputStream。
ImageIO.write(image, "jpg",response.getOutputStream())
}
public String makeNum(){
Random r=new Random()
String num=r.nextInt(10000000)+""
StringBuffer stringBuffer=new StringBuffer()
for (int i = 0i <7-num.length()i++) {
stringBuffer.append("0")
}
num=stringBuffer.toString()+num
return num
}
java对于文件的处理都可以用二进制流处理。new file然后将流写进去就可以了,根据你命名的文件后缀名去区分是什么类型的文件,对于二进制流来说没有什么类型的,所以你说的这种转换我不太明白。如果是将存储在数据库的二进制流拿到之后展示,有两种方式,一种是将二进制流写入到磁盘然后通过路径访问,一种是直接输出二进制流到呈现的view(如果你的view支持的话)。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)