2012-06-25 50 views
10

के माध्यम से प्रदर्शन बीएलओबी (छवि) मेरे पास एक चार्ट ओ कर्मचारियों को दिखाने के लिए एक कोड है।जेएसपी

डेटा (नाम, फोन, फोटो इत्यादि) SQLServer में संग्रहीत हैं और जेएसपी के माध्यम से प्रदर्शित होते हैं। छवि को दिखा रहा है, छवि को छोड़कर .jpg (IMAGE = BLOB कॉलम में संग्रहीत)।

वैसे, मुझे पहले से ही छवि दिखाई दे रही है (नीचे कोड देखें), लेकिन मुझे नहीं पता कि इसे .css में परिभाषित क्षेत्र में कैसे रखा जाए (नीचे कोड देखें), क्योंकि परिणाम परिणाम के माध्यम से प्राप्त किया गया है ब्राउज़र में पूरे पृष्ठ में लोड किया गया है।

क्या कोई जानता है कि मैं छवि को कैसे 'फ्रेम' कर सकता हूं?

#photo 
{ 
    padding: 0px; 
    vertical-align: middle; 
    text-align: center; 
    width: 170px; 
    height: 220px; 
} 

अग्रिम धन्यवाद:

<% 
Connection con = FactoryConnection_SQL_SERVER.getConnection("empCHART"); 
Statement stSuper = con.createStatement(); 
Statement stSetor = con.createStatement(); 

Blob image = null; 
byte[] imgData = null; 

ResultSet rsSuper = stSuper.executeQuery("SELECT * FROM funChart WHERE dept = 'myDept'"); 

if (rsSuper.next()) { 
image = rsSuper.getBlob(12); 
imgData = image.getBytes(1, (int) image.length()); 
response.setContentType("image/gif"); 
OutputStream o = response.getOutputStream(); 
//o.write(imgData); // even here we got the same as below. 
//o.flush(); 
//o.close(); 

--[...] 

<table style="margin: 0px; margin-top: 15px;"> 
<tr> 
<td id="photo"> 
<img title="<%=rsSuper.getString("empName").trim()%>" src="<%= o.wite(imageData); o.flush(); o.close(); %>" /> 
</td> 
</td> 

<td id="empData"> 
<h3><%=rsSuper.getString("empName")%></h3> 
<p><%=rsSuper.getString("Position")%></p> 
<p>Id:<br/><%=rsSuper.getString("id")%></p> 
<p>Phone:<br/><%=rsSuper.getString("Phone")%></p> 
<p>E-Mail:<br/><%=rsSuper.getString("Email")%></p> 
</td> 
</table> 

और यहाँ टुकड़ा चित्रों को फ्रेम करने वाला है!

+0

मानक समाधान छवि, आमतौर पर एक और सर्वलेट ब्राउज़र के अनुरोध का जवाब द्वारा सेवा से HTML (यहाँ) को अलग करने के लिए है पर जिम्मेदार बताते हैं। तो जेएसपी पेज में केवल '' जैसे कुछ शामिल हैं और आपके पास एक सर्वलेट है जिसमें आप छवि की बाइनरी का जवाब देते हैं। एक वैकल्पिक समाधान (मैं इसकी अनुशंसा नहीं करता) छवि को जेएसपी पृष्ठ में बेस 64 के रूप में भेजना होगा। –

उत्तर

16

आप यहां कुछ मौलिक गलतियां कर रहे हैं। <img src> को एक यूआरएल इंगित करना चाहिए, जिसमें छवि की बाइनरी सामग्री नहीं है। जेएसपी पेज के सामग्री प्रकार को image/gif पर सेट नहीं किया जाना चाहिए। इसे text/html पर डिफ़ॉल्ट रखा जाना चाहिए। यह सच नहीं है कि वेबसर्वर को HTML परिणाम में ठोस छवियों को शामिल करना चाहिए जैसा कि आप अपेक्षा करते थे। यह वेबब्रोसर है जो src विशेषता में पाए गए यूआरएल के आधार पर अलग-अलग छवियों को डाउनलोड करता है और फिर उन्हें तदनुसार प्रस्तुत करता है।

सबसे अलग सर्वलेट बनाना है जो छवि को डीबी से प्रतिक्रिया शरीर में स्ट्रीम करता है। आप अनुरोध पैरामीटर या पथ जानकारी द्वारा छवि को विशिष्ट रूप से पहचान सकते हैं।

String id = request.getParameter("id"); 

// ... 

InputStream input = resultSet.getBinaryStream("imageColumnName"); 
OutputStream output = response.getOutputStream(); 
response.setContentType("image/gif"); 
// Now write input to output the usual way. 

असंबंधित ठोस समस्या के लिए, का उपयोग कर:

<img src="imageServlet?id=<%=rsSuper.getString("id")%>" /> 

doGet() विधि तो मूल रूप से यह काम करने होंगे: यहाँ एक उदाहरण है कि के लिए एक अनुरोध पैरामीटर का उपयोग करता है स्क्रिप्टलेट इस तरह आधिकारिक तौर पर एक दशक से हतोत्साहित है। शायद आप पूरी तरह से पुरानी किताबें/ट्यूटोरियल पढ़ रहे थे या एक प्राचीन जेएसपी वेब अनुप्रयोग बनाए रख रहे हैं। कुछ ऐसी जानकारियां दी के लिए, कुछ संकेत के लिए भी निम्न सवालों के जवाब देखें:

+0

वैकल्पिक रूप से, ओपी 'सेवा()' विधि को ओवरराइड कर सकता है और HTTP विधियों के बारे में चिंता नहीं कर सकता है। : पी –

+1

@Elite: यदि कोई क्लाइंट निष्क्रिय रूप से किसी छवि को पुनर्प्राप्त करने के लिए गलत तरीके से गलत तरीके का उपयोग करता है तो यह सर्वलेट की गलती नहीं है। यह हमेशा मिलता है। कुछ और गलत है। – BalusC

+0

या 'डेटा:' url http://en.wikipedia.org/wiki/Data_URI_scheme –

2

आप एक HTML टैग के माध्यम से चित्र दिखाना चाहते हैं, तो आप उस छवि को उस सर्वर में संसाधन को इंगित करना होगा जो छवि को लोड करता है, ताकि क्लाइंट ब्राउज़र इसे लोड कर सके। इस तरह, आप <img /> टैग शैली कर सकते हैं।

इसे पूरा करने के लिए, अधिकांश लोग ImageServlet लिखते हैं जो छवि के बाइनरी डेटा को लोड करता है और <img src = "/source/to/someImageServlet?id=<%=rsSuper.getString("id")%>" id = "photo"/> लिखता है।

+0

आपके ध्यान के लिए धन्यवाद! – jMarcel

0
Connection con = new DBConnection().getConnection(); 
     String sql = " SELECT * FROM tea "; 
     PreparedStatement ps = con.prepareStatement(sql); 
     ResultSet rs = ps.executeQuery(); 

     while (rs.next()) { 
      byte[] imgData = rs.getBytes("img"); // blob field 
      request.setAttribute("rvi", "Ravinath"); 
      rs.getString("teatitle"); 

      String encode = Base64.getEncoder().encodeToString(imgData); 
      request.setAttribute("imgBase", encode); 
     } 

निकालने के लिए तो इस्तेमाल किया JSTL jsp पेज

<img src="data:image/jpeg;base64,${imgBase}" /> 
+0

ध्यान दिया जाना चाहिए कि यह दृष्टिकोण बेहद अक्षम है। छवि अपलोड की पूर्वावलोकन सुविधा के रूप में इसे सबसे अधिक उपयोग करें। एक निश्चित रूप से डिज़ाइन किए गए वेब एप्लिकेशन में उन अस्थायी छवियों को पहले से ही डीबी में पहले से ही संग्रहीत नहीं किया गया है। दूसरे शब्दों में, स्थिर छवियों को प्रदर्शित करने के लिए इस दृष्टिकोण की बिल्कुल अनुशंसा नहीं की जाती है। – BalusC