• Servlet以流的形式返回图片


    代码:

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageDecoder;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    public class Servlet2 extends HttpServlet {
    	// 设定输出的类型
    	private static final String GIF = "image/gif;charset=GB2312";
    	private static final String JPG = "image/jpeg;charset=GB2312";
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		/*String imagePath = "D:\1234.gif";*/
    		String imagePath = this.getServletContext().getRealPath("/img/1234.gif");//获取真实路径
    		response.reset();
    		OutputStream output = response.getOutputStream();// 得到输出流
    		if (imagePath.toLowerCase().endsWith(".jpg"))// 使用编码处理文件流的情况:
    		{
    			response.setContentType(JPG);// 设定输出的类型
    			// 得到图片的真实路径
    			// 得到图片的文件流
    			InputStream imageIn = new FileInputStream(new File(imagePath));
    			// 得到输入的编码器,将文件流进行jpg格式编码
    			JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);
    			// 得到编码后的图片对象
    			BufferedImage image = decoder.decodeAsBufferedImage();
    			// 得到输出的编码器
    			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
    			encoder.encode(image);// 对图片进行输出编码
    			imageIn.close();// 关闭文件流
    		}
    		if (imagePath.toLowerCase().endsWith(".gif"))// 不使用编码处理文件流的情况:
    		{
    			response.setContentType(GIF);
    			 File file = new File(imagePath);
    	            FileInputStream fis = new FileInputStream(file);
    	            ServletOutputStream sos = response.getOutputStream();
    	            byte[] b = new byte[1024];
    	            int n;
    	            int l = 0;
    	            while ((n = fis.read(b)) != -1) {
    	                l = l + n;
    	                sos.write(b, 0, n);
    	            }
    	            response.setContentLength(l);
    	            fis.close();
    	            sos.close();
    		}
    		output.close();
    	}
    }
    
  • 相关阅读:
    xpath获取a标签下文本
    Python学习笔记Day26
    DNS原理
    命令实战解析
    linux系统ext文件系统知识
    磁盘分区重点知识
    机械磁盘读写磁盘数据的原理
    linux用户管理
    linux命令讲解
    linux系统定时任务
  • 原文地址:https://www.cnblogs.com/yuanchaoyong/p/7671130.html
Copyright © 2020-2023  润新知