2014-10-09 24 views
6

Ich bin mit Feder 4 und 4 überwintern zu und aus der Datenbank zu laden und abrufen Bild. Ich habe mehrteiliges Bild in Byte-Array konvertiert und in der Datenbank gespeichert. Meine Frage ist, wie das Bild aus Datenbank abgerufen werden und den Byte-Array in jsp anzuzeigen, ohne es in lokalem System zu speichern.Bild hochladen im Frühjahr mvc

+0

aus dem Zusammenhang gerissen Es ist besser, das Bild in der 'Platte path' zu laden, sondern mit Hilfe der Datenbank –

+0

ich durch sie ging, aber in meinem Fall muss ich es in db speichern, irgendeine Lösung? –

+0

Entschuldigung, ich bin nicht mit Hibernate vertraut. nur versuchen, diese http://stackoverflow.com/questions/24567553/save-and-retrieve-image-from-database-using-spring-mvc-and-hibernate-rest-servic und http://stackoverflow.com/questions/17384928/hibernate-how-to-abrufen-ein-Bild-aus-dem-Datenbank –

Antwort

3

Da Sie Ihre DB-Struktur zum Speichern des Bildes nicht erwähnt haben, würde ich denken, dass Sie es in blob Datentyp speichern.

Teil 1: ControllerClass

Nachdem das Bild von der db Abrufen kodieren dann das Bild Base64.encode und Karte das Bild zu Ihrem jsp mit (mit 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 

Teil 2: JSP

es dann durch Decodierung der Byte-Array,

<img id="myImg" name="myImg" src="data:image/jpg;base64,<c:out value='${myImage}'/>" > 
0

wahrsten Sinne des Wortes, was wir tun, ist

in dao auf dem JSP anzuzeigen Methode

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

In-Service-Methode nur Input Rückkehr

In Controller an die Steuerung

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

jetzt schließen Sie einfach admin/user/{id}/Foto oder eine beliebige Zeichenfolge, die Sie wünschen in < img src verwenden = ""> solange sie übereinstimmen und du hast dein Foto

0

Sie können es ohne Probleme tun. Sie müssen einen Controller einrichten, der das Bild sendet, wenn ein Browser es anfordert. Aber hier bringt der Controller es nicht in ein Model, um es einer View zu geben, sondern generiert direkt die HTTP-Response. Dann geben Sie in Ihrer JSP einfach die relevante URL an.

hier ein (Teil-) ist Beispiel dafür, was es sein könnte:

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