2011-12-24 2 views
26

Как обслуживать изображение, хранящееся на моем жестком диске, в сервлет?
Пример:
У меня есть изображение, сохраненное в пути 'Images/button.png', и я хочу служить в сервлете с URL-адресом file/button.png.Вывод файла изображения из сервлета

+0

Знаете ли вы, что значение 'Content-Type' установлено в' image/png' или что вам нужно, как указано в следующем ответе? – Lion

ответ

19
  • карту сервлет к /file URL-шаблон
  • читать файл с диска
  • записать его response.getOutputStream()
  • установить заголовок Content-Type в image/png (если это только PNGs)
45

Настоящий код:

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

Вот еще один очень простой способ.

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

Это очень неэффективно, поскольку он излишне анализирует изображение в объект BufferedImage. Этот шаг не требуется, если вы не хотите манипулировать изображением (изменение размера, обрезка, преобразование и т. Д.). Самый быстрый способ - просто передать байты, не модифицированные из входного изображения, в выходной сигнал ответа. – BalusC

Смежные вопросы