从servlet输出图像文件

如何在servlet中提供存储在硬盘上的图像?
例如:
我有一个存储在路径'Images/button.png' ,我想在一个带有URL file/button.png的servlet中提供这个'Images/button.png'

  • 将servlet映射到/file url-pattern
  • 从磁盘读取文件
  • 把它写到response.getOutputStream()
  • Content-Type标头设置为image/png (如果它只是pngs)

这是工作代码:

  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { ServletContext cntx= req.getServletContext(); // Get the absolute path of the image String filename = cntx.getRealPath("Images/button.png"); // retrieve mimeType dynamically String mime = cntx.getMimeType(filename); if (mime == null) { resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } resp.setContentType(mime); File file = new File(filename); resp.setContentLength((int)file.length()); FileInputStream in = new FileInputStream(file); OutputStream out = resp.getOutputStream(); // Copy the contents of the file to the output stream byte[] buf = new byte[1024]; int count = 0; while ((count = in.read(buf)) >= 0) { out.write(buf, 0, count); } out.close(); in.close(); } 

这是另一种非常简单的方法。

 File file = new File("imageman.png"); BufferedImage image = ImageIO.read(file); ImageIO.write(image, "PNG", resp.getOutputStream());