यह स्पष्ट नहीं है कि आप किस दृढ़ता API का उपयोग कर रहे हैं। जेडीबीसी? जेपीए? अच्छा राजभाषा 'हाइबरनेट? मैं JDBC मान लूंगा। JDBC में, आप PreparedStatement#setBinaryStream()
एक इनपुटस्ट्रीम
स्टोर करने के लिए डेटाबेस में, या तैयार स्टेटमेंट#सेटबाइट्स()
एक बाइट[]
स्टोर करने के लिए डेटाबेस में। किसी भी तरह, PostgreSQL में आपको एक bytea
इसके लिए कॉलम।
जैसा कि आप अपलोड की गई फ़ाइल को PdfReader
. द्वारा सत्यापित कर रहे हैं सबसे पहले, इनपुटस्ट्रीम
अनुपयुक्त है। इसे केवल एक बार ही पढ़ा जा सकता है। जब भी आपको InputStream
पढ़ने की आवश्यकता होगी, क्लाइंट कई बार फ़ाइल को दोबारा नहीं भेजेगा फिर से। आपको InputStream
को कॉपी करना होगा एक बाइट[]
. के लिए पहला।
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
अपाचे कॉमन्स आईओ का हिस्सा है; यदि आप FileUpload का उपयोग कर रहे हैं, तो आपके पास पहले से ही है)
byte[]
. का उपयोग करने के लिए iText को बदलना न भूलें इसके बजाय:
PdfReader localPdfReader = new PdfReader(filecontent);
आपके द्वारा iText द्वारा इसे सत्यापित करने के बाद, आप इसे PostgreSQL bytea
. में संग्रहीत कर सकते हैं JDBC का उपयोग करते हुए कॉलम इस प्रकार है:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();