2011-12-24 41 views
26

Làm cách nào để phục vụ một hình ảnh, được lưu trữ trên ổ cứng của tôi, trong một servlet?
Ví dụ:
Tôi có hình ảnh được lưu trữ trong đường dẫn 'Images/button.png' và tôi muốn phục vụ điều này trong một servlet có URL file/button.png.Xuất tệp hình ảnh từ một servlet

+0

Bạn có biết tầm quan trọng của 'Content-Type' được đặt thành' image/png' hoặc bất cứ điều gì bạn cần như được đề cập trong câu trả lời sau không? – Lion

Trả lời

19
  • ánh xạ một servlet để url-pattern /file
  • đọc các tập tin từ đĩa
  • ghi nó vào response.getOutputStream()
  • thiết lập Content-Type tiêu đề để image/png (nếu nó chỉ là pngs)
45

Đây là mã hoạt động:

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(); 

} 
0

Đây là một cách rất đơn giản khác.

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

Điều này rất không hiệu quả vì nó phân tích cú pháp hình ảnh thành một đối tượng 'BufferedImage' một cách không cần thiết. Bước này không cần thiết nếu bạn không muốn thao tác hình ảnh (thay đổi kích cỡ, cắt, biến đổi, v.v.). Cách nhanh nhất là chỉ truyền các byte chưa sửa đổi từ đầu vào hình ảnh đến đầu ra phản hồi. – BalusC

Các vấn đề liên quan