2014-10-09 24 views
6

Tôi đang sử dụng spring 4 và hibernate 4 để tải lên và truy xuất hình ảnh đến và từ cơ sở dữ liệu. Tôi đã chuyển đổi hình ảnh nhiều thành mảng byte và được lưu trữ trong cơ sở dữ liệu. Truy vấn của tôi là cách truy xuất hình ảnh đó từ cơ sở dữ liệu và hiển thị mảng byte trong jsp mà không lưu trữ nó trong hệ thống cục bộ.Tải lên hình ảnh vào mùa xuân mvc

+0

Out of bối cảnh Tốt hơn là tải lên các hình ảnh trong 'path' đĩa, thay vì sử dụng cơ sở dữ liệu –

+0

tôi đã đi qua nó, nhưng trong trường hợp của tôi tôi cần phải lưu trữ nó trong db, bất kỳ giải pháp? –

+0

xin lỗi tôi không quen với hibernate. chỉ cần thử http://stackoverflow.com/questions/24567553/save-and-retrieve-image-from-database-using-spring-mvc-and-hibernate-rest-servic và http://stackoverflow.com/questions này/17384928/hibernate-how-to-retrieve-an-image-từ-the-cơ sở dữ liệu –

Trả lời

3

Vì bạn chưa đề cập đến cấu trúc db của mình để lưu trữ hình ảnh, tôi sẽ xem xét rằng bạn đang lưu trữ nó trong blob kiểu dữ liệu.

Phần 1: ControllerClass

Sau khi lấy hình ảnh từ db, sau đó mã hóa hình ảnh rằng việc sử dụng Base64.encode và bản đồ hình ảnh đó để jsp của bạn (sử dụng 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 

Phần 2: JSP

Sau đó hiển thị nó trên JSP bằng cách giải mã các mảng byte,

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

Theo nghĩa đen những gì chúng ta đang làm là

trong dao phương pháp

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

Trong phương pháp dịch vụ chỉ trở inputstream để điều khiển

Trong điều khiển

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

bây giờ chỉ cần cắm vào admin/user/{id}/ảnh hoặc bất kỳ chuỗi bạn muốn sử dụng trong < img src = ""> miễn là chúng phù hợp và bạn có ảnh của mình

0

Bạn có thể làm điều đó mà không gặp vấn đề gì. Bạn phải thiết lập bộ điều khiển sẽ gửi hình ảnh khi trình duyệt yêu cầu. Nhưng ở đây, bộ điều khiển không đặt nó vào một Mô hình để đưa nó vào một khung nhìn, nhưng trực tiếp tạo ra phản hồi HTTP. Sau đó, trong JSP của bạn, bạn chỉ cần chỉ ra URL có liên quan.

Đây là một (một phần) ví dụ về những gì nó có thể là:

@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); 
} 
Các vấn đề liên quan