日期:2014-05-20  浏览次数:20606 次

求助,关于servlet输出图象的问题
我这样写:

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

response.setHeader( "Pragma ",   "no-cache ");
response.setHeader( "Cache-Control ",   "no-cache ");
response.setDateHeader( "Expires ",   0);
response.setContentType( "image/jpeg ");

ServletOutputStream   sos   =   response.getOutputStream();
BufferedImage   bi=ImageIO.read(new   File( "imageNotFound.jpg "));
File   f   =   new   File( "abc.jpg ");  

ImageIO.write(bi, "JPG ",sos);
ImageIO.write(bi, "JPG ",f);
sos.close();
}

输入6.41k的jpeg图片
输出到文件里变成2.56k的jpeg图片
输出到ServletOutputStream里,却变为了25.8k的bmp图片

请问为什么啊?怎么解决?谢谢

------解决方案--------------------
不要用Image,直接用FileInputStream读入后写出到你的sos里面去。
------解决方案--------------------
try this.没有测试过,以前也没有写过
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setHeader( "Pragma ", "no-cache ");
response.setHeader( "Cache-Control ", "no-cache ");
response.setDateHeader( "Expires ", 0);
response.setContentType( "image/jpeg ");

ServletOutputStream sos = response.getOutputStream();
FileInputStream bis = new FileInputStream(new File( "imageNotFound.jpg ")));

Byte c;
while((c=bis.readByte()) != -1)
sos.write(c);
}
bis.close();
sos.close();