2014-10-09 13 views
6

में छवि अपलोड करें मैं वसंत 4 और हाइबरनेट 4 का उपयोग कर रहा हूं ताकि डेटाबेस को और अपलोड करने के लिए छवि को अपलोड और पुनर्प्राप्त किया जा सके। मैंने मल्टीपार्ट छवि को बाइट सरणी में परिवर्तित कर दिया है और डेटाबेस में संग्रहीत किया है। मेरी क्वेरी डेटाबेस से उस छवि को पुनर्प्राप्त करने का तरीका है और बाइट सरणी को स्थानीय सिस्टम में संग्रहीत किए बिना jsp में प्रदर्शित करें।वसंत एमवीसी

+0

, लेकिन मेरे मामले में मुझे इसे डीबी, किसी भी समाधान में स्टोर करने की ज़रूरत है? –

+0

मैं इसे माध्यम से चला गया का इस्तेमाल करके उनकी बेहतर है बाहर –

+0

क्षमा करें मैं हाइबरनेट से परिचित नहीं हूँ। बस इसे http://stackoverflow.com/questions/24567553/save-and-retrieve-image-from-database-using-spring-mvc-and-hibernate-rest-servic और http://stackoverflow.com/questions आज़माएं/17384928/हाइबरनेट-कैसे-से-पुनर्प्राप्ति-एक-छवि-से-डेटाबेस –

उत्तर

3

जैसा कि आपने छवि को संग्रहीत करने के लिए अपनी डीबी संरचना का उल्लेख नहीं किया है, तो मुझे लगता है कि आप इसे blob डेटाटाइप में संग्रहीत कर रहे हैं।

भाग 1: ControllerClass

डाटाबेस से चित्र लाने के बाद, तो Base64.encode का उपयोग कर उस छवि को सांकेतिक शब्दों में बदलना और अपने jsp करने के लिए उस छवि के नक्शे (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 

भाग 2: JSP

फिर बाइट सरणी डिकोडिंग द्वारा JSP पर प्रदर्शित,

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

सचमुच हम क्या कर रहे

दाव में है विधि

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

सेवा विधि में सिर्फ

नियंत्रक नियंत्रक में InputStream लौटने

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

अब सिर्फ व्यवस्थापक/उपयोगकर्ता/{आईडी}/तस्वीर या किसी भी स्ट्रिंग < img src में उपयोग करना चाहते हैं में प्लग = ""> जब तक वे मेल खाते हैं और आपको अपनी तस्वीर

0

आप बिना किसी समस्या के कर सकते हैं। आपको एक नियंत्रक स्थापित करना होगा जो ब्राउज़र को अनुरोध करते समय छवि भेज देगा। लेकिन यहां, नियंत्रक इसे एक मॉडल में नहीं रखता है ताकि इसे देखने के लिए दिया जा सके, लेकिन सीधे HTTP प्रतिक्रिया उत्पन्न हो। फिर अपने जेएसपी में, आप बस प्रासंगिक यूआरएल इंगित करते हैं।

यहाँ एक (आंशिक) यह क्या हो सकता है की उदाहरण है:

@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); 
} 
संदर्भ से यह `डिस्क path` में छवि अपलोड करने, डेटाबेस
संबंधित मुद्दे