2013-02-15 91 views
7

से एक जेएसपी को छवि लिखना मैं डेटाबेस से एक जेएसपी (बीएलओबी के रूप में सहेजा गया) में एक छवि लिखने की कोशिश कर रहा हूं। मैं वसंत का उपयोग कर रहा हूं और मेरे नियंत्रक में, मेरे पास छवि बाइट है []।डेटाबेस

तो मैं इस

byte[] imageBytes = dao.getImage(cc);

model.setAttribute("myimage", new String(imageBytes));

मेरी jsp में कर रहा हूँ, मैं

<img src=data:image/jpg;base64,"<c:out value='${myimage}'/>" alt="my image" />

है लेकिन मैं सिर्फ अपने jsp पेज में ascii charcaters देखते हैं (जैसे नीचे)।

K _ & w: = 5)^- O? R ? z i * \ * M ? 1 ??] ?, जेड? मैं? पी ??? z ~? v? k? LMS? ई .Q]? एक? वह/?; k] डब्ल्यू? ग? E.Q ???] ?? 麯 ~ - Lz जेड: 6 ?? z = एक + e'5? ? ???? सी | WV y - ?? यू ?? डी जी ݭ) एक?? ? 7 $ ????] ??।] एस? बो? Lezhgzn? ? ? E . ? . ] < eOO ? एसए ?? ˰. ] ? '? ? ? ई ? ` ] ֻ डी ??? \?} यू}? > T m z h t U | ई}? K > T | Q ] Vd? Q? G E A? ˰ * wz i (sh? U^b? z ~? V m Z iqq? यूएलएफ% L z ~? v o z i ;! & F VϨ ? K ? u ޵ u? Vxx? ? ѯ ।> डब्ल्यू [ग ֻ के.टी. ?????) ई? b} एम? जी? hѯA /? जे ( 3 ?

मैंने बाइट [] को बाइटएरे ऑटपुटस्ट्रीम में परिवर्तित करने और बेस 64 के साथ एन्कोड करने की कोशिश की, लेकिन काम नहीं किया

model.addAttribute("image", Base64.encode(imageBytes));

लेकिन जब मैं एक फ़ाइल (myimage.jpg) करने के लिए बाइट [] लिखने FileOutputStream का उपयोग कर, मैं देख छवि पुराने जमाने रास्ता

<img src="../images/myimage.jpg" .... />

+2

आपको 'image/jpeg'' image/gif' आदि जैसे उपयुक्त मान पर 'सामग्री-प्रकार' शीर्षलेख सेट करने की आवश्यकता है – kaysush

+0

धन्यवाद सुकू जो – mi3

उत्तर

5

की तरह कुछ की कोशिश करो दुर्भाग्य से यह काम नहीं करेगा।

आपको स्प्रिंग एमवीसी कंट्रोलर विधि का उपयोग करने की आवश्यकता है जो आपकी अपनी छवि बाइट [] को आपके HttpServletResponse क्लास में लिख देगी।

उदाहरण:

@RequestMapping("/getImage/{id}") 
public void getImage(HttpServletResponse response,@PathVariable("id") final String id) throws IOException { 
    response.setContentType("image/jpeg"); 
    byte[] imageBytes = dao.getImage(id); 
    response.getOutputStream().write(imageBytes); 
    response.getOutputStream().flush(); 
} 

और फिर ग्राहक पर एचटीएमएल कोड का उपयोग करें:

<img src="getImage/222" ... /> 

अद्यतन: हाँ आप इसे @ResposneBody एनोटेशन स्प्रिंग 3 से शुरू के साथ क्या कर सकते हैं।1

रजिस्टर अपने ByteArrayHttpMessageConverter

<mvc:annotation-driven> 
    <mvc:message-converters> 
     <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"> 
      <property name="supportedMediaTypes"> 
       <list> 
        <value>image/jpeg</value> 
        <value>image/png</value> 
       </list> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

और फिर yout नियंत्रक का उपयोग करें:

@RequestMapping("/getPhoto/{id}") 
public @ResponseBody byte[] getPhoto(@PathVariable("id") final String id) throws IOException { 
    byte[] imageBytes = dao.getImage(id); 
    return imageBytes; 
} 
+0

हाँ मैं सोच रहा हूं कि यह @ResponseBody एनोटेशन – mi3

+0

@ mi3 का उपयोग करके किया जा सकता है, हाँ आप कर सकते हैं। बस मेरा अपडेट देखें। –

4
उपयोग करते हुए मेरे jsp में दिखाया गया है कर

चाल एक और सर्वलेट है जो डेटा को सीधे HttpServletResponse.getOutputStream() पर आउटपुट करता है, और जैसा कि सुकु उचित सामग्री प्रकार के साथ कहता है। फिर अपने जेएसपी में आप यूआरएल को इंगित करते हैं कि आपकी छवि सर्वलेट <img/> टैग में मैप की गई है। उदाहरण के लिए, यदि छवि सर्वलेट /imgServlet को मैप किया है, तो आप इस

<img src="imgServlet?img=myimage" ... /> 

की तरह कुछ का प्रयोग करेंगे इस http://www.avajava.com/tutorials/lessons/how-do-i-return-an-image-from-a-servlet-using-imageio.html

+0

पर काम करता है, वही है जो मैं कर रहा हूं। – mi3

0

एक अन्य विकल्प है, अगर आप ModelAndView का उपयोग कर की तरह एक कस्टम देखें उद्देश्य यह है कि मीडिया सेट बनाने के लिए किया जाएगा आउटपुट स्ट्रीम में छवि के बाइट टाइप करें और आउटपुट करें। इस तरह आप आसानी से रीडायरेक्ट सेट करने के लिए ModelAndView का उपयोग कर सकते हैं या कोई त्रुटि होने पर सामान्य त्रुटि या यहां तक ​​कि एक जेएसपी त्रुटि पृष्ठ लौटा सकते हैं, जैसे छवि नहीं मिली।

0
@RequestMapping(value="/imageDisplays/{imageId}") 

public void getImage(@PathVariable int imageId,HttpSession session,HttpServletResponse response) { 
    OutputStream oImage; 
    try{ 
      byte[] imageInByte = // get image in byte array 
      response.setContentType("image/jpeg, image/jpg, image/png, image/gif"); 
      oImage=response.getOutputStream(); 
      oImage.write(imageInByte); 
      oImage.flush(); 
      oImage.close(); 
    }catch(Exception e){ 
     LOGGER.debug("Request could not be completed at this moment. Please try again."); 
     e.printStackTrace(); 
    } 
    } 

0

यह एक मैं पर काम कर रहा था करने के लिए इसी तरह की एक सवाल है। हालांकि, मैं servlet के बजाय लंबे मतदान का उपयोग कर रहा था। यहां लिंक stackoverflow.