यह सत्यापित करके प्रारंभ करें कि uploadedInputStream
एक मान्य छवि है, शायद इसे ImageIO.write
. का उपयोग करके लिखकर . आप हमेशा ImageIO.read
का उपयोग कर सकते हैं छवि को वापस पढ़ने के लिए और इसे वापस ByteArrayInputStream
में लिखने के लिए;)
मैंने H2 डेटाबेस का उपयोग करके एक त्वरित परीक्षण किया।
कुछ बातें मैंने नोट कीं। ब्लॉब#लंबाई
एक लंबा
देता है , जबकि Blob#getBytes
एक int
. की अपेक्षा करता है , इसका मतलब यह हो सकता है कि आप बाइट स्ट्रीम को छोटा कर रहे हैं।
साथ ही, H2 के दस्तावेज़ीकरण से ऐसा प्रतीत होता है कि ब्लॉब
सामग्री को स्मृति में नहीं रखा जाता है, इसलिए मैं getBinaryStream
. का उपयोग करता हूं इसके बजाय।
आयात करें आयात java.sql.Connection; आयात java.sql.DriverManager; आयात java.sql.PreparedStatement; आयात java.sql.ResultSet; आयात java.sql.SQLException; आयात javax.imageio.ImageIO; आयात javax.swing.ImageIcon; आयात javax.swing.JLabel आयात करें; सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क) {नया टेस्टइमेजडेटाबेस (); } सार्वजनिक टेस्टइमेजडेटाबेस () {कोशिश करें {clearDatabase (); छवि सहेजें(); लोड इमेज (); } पकड़ें (ClassNotFoundException | SQLException | IOException expक्स्प) { क्स्प.प्रिंटस्टैकट्रेस (); } } रक्षित कनेक्शन getConnection() फेंकता है ClassNotFoundException, SQLException { Class.forName("org.h2.Driver"); वापसी DriverManager.getConnection("jdbc:h2:d:\\Image", "sa", ""); } संरक्षित शून्य clearDatabase () IOException, ClassNotFoundException, SQLException फेंकता है {कनेक्शन con =null; रेडीस्टेडमेंट stmt =null; कोशिश करें {con =getConnection (); System.out.println ("डेटाबेस की सफाई"); stmt =con.prepareStatement ("छवियों से हटाएं"); इंट अपडेट किया गया =stmt.executeUpdate (); System.out.println ("अपडेटेड" + अपडेटेड + "पंक्तियाँ"); } अंत में {कोशिश {stmt.close (); } पकड़ें (अपवाद ई) { } कोशिश करें {con.close (); } पकड़ें (अपवाद ई) { } } संरक्षित शून्य सेवइमेज () IOException, ClassNotFoundException, SQLException फेंकता है {कनेक्शन con =null; रेडीस्टेडमेंट stmt =null; ByteArrayOutputStream baos =null; ByteArrayInputStream आधार =शून्य; कोशिश करें {बाओस =नया बाइटअरेऑटपुटस्ट्रीम (); फ़ाइल स्रोत =नई फ़ाइल ("/ पथ/से/फ़ाइल"); System.out.println ("स्रोत का आकार =" + स्रोत। लंबाई ()); BufferedImage img =ImageIO.read (स्रोत); ImageIO.write(img, "png", baos); बाओस.क्लोज़ (); bais =नया ByteArrayInputStream (baos.toByteArray ()); कॉन =गेटकनेक्शन (); stmt =con.prepareStatement ("छवियों (छवि) मानों में डालें (?)"); stmt.setBinaryStream(1, bais); इंट अपडेट किया गया =stmt.executeUpdate (); System.out.println ("अपडेटेड" + अपडेटेड + "पंक्तियाँ"); } अंत में {कोशिश { bais.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { baos.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { stmt.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { con.close (); } कैच (अपवाद ई) { } } संरक्षित शून्य लोडइमेज () IOException, ClassNotFoundException, SQLException फेंकता है {कनेक्शन con =null; रेडीस्टेडमेंट stmt =null; परिणामसेट आरएस =शून्य; कोशिश करें {con =getConnection (); stmt =con.prepareStatement ("छवियों से छवि का चयन करें"); आरएस =stmt.executeQuery (); जबकि (rs.next ()) {System.out.println("गेटिंग ब्लॉब"); बूँद बूँद =rs.getBlob(1); System.out.println ("छवि पढ़ना"); BufferedImage img =ImageIO.read (blob.getBinaryStream ()); System.out.println ("img =" + img); JOptionPane.showMessageDialog(null, new JScrollPane(new JLabel(new ImageIcon(img)))); }} अंत में {कोशिश करें { rs.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { stmt.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { con.close (); } कैच (अपवाद ई) { } }}}