Come servire un'immagine, memorizzata sul mio disco rigido, in un servlet?
Per esempio:
Ho un'immagine memorizzata nel percorso 'Images/button.png'
e voglio servirlo in un servlet con l'URL file/button.png
.Emettere un file immagine da un servlet
26
A
risposta
19
- mappare una servlet per il
/file
url-pattern - leggere il file dal disco
- scrittura a
response.getOutputStream()
- impostare l'intestazione
Content-Type
aimage/png
(se è solo PNG)
45
Ecco il codice di lavoro:
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
Ecco un altro modo molto semplice.
File file = new File("imageman.png");
BufferedImage image = ImageIO.read(file);
ImageIO.write(image, "PNG", resp.getOutputStream());
+1
Questo è molto inefficiente poiché analizza inutilmente l'immagine in un oggetto 'BufferedImage'. Questo passaggio non è necessario se non si desidera manipolare l'immagine (ridimensionamento, ritaglio, trasformazione, ecc.). Il modo più veloce è quello di trasmettere in streaming i byte non modificati dall'input dell'immagine all'output di risposta. – BalusC
Problemi correlati
- 1. Chiamata posta servlet da un altro servlet
- 2. come emettere un "show dbs" da pymongo
- 3. Posso generare un thread da un servlet?
- 4. Accesso al file nella cartella WebContent da un servlet
- 5. Elixir - Scarica un file (immagine) da un URL
- 6. Carica immagine da Android a servlet java e salvalo
- 7. Come inviare parametri da un servlet
- 8. Come chiamare un servlet da codice Java
- 9. ridimensiona immagine da file
- 10. Java: come caricare un file su un server WebDAV da un servlet?
- 11. Quando è corretto lanciare un ServletException da un servlet?
- 12. Emettere una variabile Visual Studio controllata su un file
- 13. Provare ad emettere il mio LogCat su un file
- 14. Emettere la registrazione della maglia in un file?
- 15. CSS: visualizzazione di una particolare icona da un file immagine
- 16. Salva tutti i file di immagine da un sito web
- 17. Ottieni un'estensione di immagine da un file caricato in Laravel
- 18. Come creare un file immagine da QGraphicsScene/QGraphicsView?
- 19. come emettere un url relativo redirect da nginx?
- 20. Emettere un HTTP GET da REPL in Racket
- 21. Come posso emettere un segnale da un'altra classe?
- 22. Come verificare se un file è un file immagine valido?
- 23. verificare se un file è un file di immagine
- 24. Rendere un oggetto RxJava osservabile da emettere da un altro metodo
- 25. Emettere un URL di repository utilizzando Octokit.rb
- 26. Ottenere un oggetto immagine da un array di byte
- 27. java.lang.IllegalArgumentException: mappatura servlet specifica un nome di servlet sconosciuto GCMBroadcast
- 28. Come leggere i dati di configurazione da un servlet
- 29. Posso convertire un file .swf in un formato immagine?
- 30. Come faccio ad emettere un valore di configurazione in un file .rst di Sphinx?
Conoscete l'importanza di 'Content-Type' impostato su' image/png' o qualsiasi altra cosa avete bisogno come menzionato nella risposta seguente? – Lion