¿Cómo se sirve una imagen, almacenada en mi disco duro, en un servlet?
Por ejemplo:
Tengo una imagen almacenada en la ruta 'Images/button.png'
y quiero mostrar esto en un servlet con la URL file/button.png
.Salida de un archivo de imagen desde un servlet
26
A
Respuesta
19
- asignar un servlet a la
/file
url-pattern - leer el archivo del disco de
- escritura a
response.getOutputStream()
- establecer la cabecera
Content-Type
aimage/png
(si es sólo PNG)
45
Aquí está el código de trabajo:
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
Aquí hay otra manera muy simple.
File file = new File("imageman.png");
BufferedImage image = ImageIO.read(file);
ImageIO.write(image, "PNG", resp.getOutputStream());
+1
Esto es muy ineficiente ya que analiza innecesariamente la imagen en un objeto 'BufferedImage'. Este paso no es necesario si no desea manipular la imagen (cambiar el tamaño, recortar, transformar, etc.). La forma más rápida es simplemente transmitir los bytes sin modificar desde la entrada de imagen a la salida de respuesta. – BalusC
Cuestiones relacionadas
- 1. Cargar un archivo jsp desde un servlet (App Engine)
- 2. Acceder al archivo en la carpeta WebContent desde un servlet
- 3. Manejo de salida de servlet en AJAX
- 4. Procesamiento asíncrono en Java desde un servlet
- 5. llamando a un servlet java desde javascript
- 6. Cómo enviar parámetros desde un servlet
- 7. Guardar salida de un archivo php en un archivo html
- 8. Java: ¿Cómo subir un archivo a un servidor WebDAV desde un servlet?
- 9. Cómo crear un archivo de imagen desde QGraphicsScene/QGraphicsView?
- 10. Cómo construir un SplashScreen desde un archivo de imagen cargado, no un recurso de proyecto
- 11. llamar a un servicio web externo desde un servlet
- 12. ¿Cómo obtener un puntero ARCHIVO desde un descriptor de archivo?
- 13. Llamando al Servlet Post desde otro Servlet
- 14. Llamar servlet desde GWT con datos de publicación y descargar archivo generado por el servlet
- 15. Salida de la salida estándar a un archivo y viceversa
- 16. Python: imprimir un archivo de salida estándar
- 17. ¿Debo limpiar la salida del servlet?
- 18. Acceso desde servlet Java
- 19. ¿Puedo convertir un archivo .swf a un formato de imagen?
- 20. crear flujo de salida de objeto desde un objeto
- 21. ¿Puedo generar un hilo de un servlet?
- 22. Salida de imagen sin formato desde la imagen de Imagick en PHP
- 23. ¿Cómo redirigir en un filtro de servlet?
- 24. ¿Cómo conseguir una imagen desde un archivo de recursos en un menuitem.icon WPF
- 25. Crear un archivo jar desde un archivo de Scala
- 26. Obtención de un ARCHIVO * desde un archivo estándar
- 27. Escribir salida WPF en el archivo de imagen
- 28. Cómo duplicar un archivo de imagen? (2.2+)
- 29. Adjuntar a un archivo de imagen
- 30. Agregar texto a un archivo de imagen
¿Conoces la importancia de 'Content-Type' que está configurado en' image/png' o lo que sea que necesites como se menciona en la siguiente respuesta? – Lion