2014-10-09 18 views
6

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

+0

Fuori contesto E 'meglio per caricare l'immagine nella path' 'del disco, piuttosto utilizzando il database –

+0

sono andato attraverso di essa, ma nel mio caso ho bisogno di memorizzarlo in db, qualsiasi soluzione? –

+0

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 –

risposta

3

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}'/>" > 
0

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

0

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