Utilizzo la molla 4 e l'ibernazione 4 per caricare e recuperare l'immagine da e verso il database. Ho convertito l'immagine multipart in array di byte e memorizzata nel database. La mia query è come recuperare quell'immagine dal database e visualizzare l'array di byte in jsp senza memorizzarlo nel sistema locale.Carica immagine in primavera mvc
risposta
Come non hai menzionato la tua struttura db per la memorizzazione dell'immagine, vorrei considerare che la stai memorizzando nel tipo di dati blob
.
Parte 1: ControllerClass
Dopo aver recuperato l'immagine dal db, quindi codificare l'immagine utilizzando Base64.encode
e mappare l'immagine al tuo jsp (utilizzando java.util.map
).
Map<String, Object> model = new HashMap<String, Object>();
model.put("myImage", Base64.encode(MyImage)); //MyImage (datatype 'byte[]') is the image retrieved from DB
return new ModelAndView("display", model); //display is the name of jsp on which you want to display image
Parte 2: JSP
Poi visualizzarlo sul JSP
decodificando l'array di byte,
<img id="myImg" name="myImg" src="data:image/jpg;base64,<c:out value='${myImage}'/>" >
letteralmente ciò che stiamo facendo è
in dao metodo
public InputStream get_user_photo_by_id(int id_user) throws Exception {
Blob blob_photo;
String sql = "Select b_photo_file from user_master where id_user = ?";
blob_photo = getJdbcTemplate().queryForObject(sql, new Object[] {id_user}, Blob.class);
if(blob_photo!=null)
return blob_photo.getBinaryStream();
else
return null;
}
Nel metodo di servizio solo tornare InputStream al controllore
controller
@ResponseBody
@RequestMapping(value = "admin/user/{id}/photo", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE)
public byte[] testphoto(@PathVariable("id") int id_sys_user, HttpSession ses) throws Exception {
byte[] thumb = null;
InputStream in = UserOps.getUserPhotobyId(id_sys_user);
if(in!=null){
thumb = IOUtils.toByteArray(in);
}
return thumb;
}
ora basta collegare admin/user/{id}/foto o qualsiasi stringa che si desidera utilizzare in < img src = ""> finché corrispondono e hai la tua foto
Puoi farlo senza problemi. Devi impostare un controller che invierà l'immagine quando un browser lo richiede. Ma qui, il controller non lo mette in un modello per darlo a una vista, ma genera direttamente la risposta HTTP. Quindi nel tuo JSP, si indica semplicemente l'URL pertinente.
Ecco una (parziale) esempio di ciò che potrebbe essere:
@RequestMapping(value = "/img/{imgid}")
public void getFile(HttpServletRequest request, @PathVariable(value = "imgid") long imgid, HttpServletResponse response) throws IOException {
contentType = "img/png"; //or what you need
response.setContentType(contentType);
// find the image bytes into into byte[] imgBytes
response.setContentLength((int) imgBytes.length);
response.setStatus(HttpServletResponse.SC_OK);
OutputStream os = response.getOutputStream();
os.write(imgBytes);
}
Fuori contesto E 'meglio per caricare l'immagine nella path' 'del disco, piuttosto utilizzando il database –
sono andato attraverso di essa, ma nel mio caso ho bisogno di memorizzarlo in db, qualsiasi soluzione? –
scusa non ho familiarità con l'ibernazione. prova questo http://stackoverflow.com/questions/24567553/save-and-retrieve-image-from-database-using-spring-mvc-and-hibernate-rest-servic e http://stackoverflow.com/questions/17384928/hibernate-how-to-retrieve-an-image-from-the-database –