Oracle APEX के माध्यम से BLOB डेटा प्रकारों में फ़ाइल अनुलग्नकों को संग्रहीत और एक्सेस करना
यहाँ तालिका के लिए स्कीमा डिज़ाइन है जिसका मैंने उपयोग किया है जिसमें एक BLOB टाइप किया गया डेटा कॉलम है। नोट:यह अंतिम समाधान का डिज़ाइन नहीं होगा; परिवर्तनों के साथ ही उनका पालन करें ताकि आप समझ सकें कि मुझे एपेक्स फॉर्म और रिपोर्ट निर्माण विज़ार्ड की कुछ सीमाओं के बारे में क्या पता चला है।
पहला प्रयास:एपेक्स टेबल, फॉर्म और रिपोर्ट सेट करना
तालिका:MY_DOC_STACK प्रथम लेआउट प्रयास
कॉलम DOC_FILE
BLOB प्रकार है जो वास्तविक दस्तावेज़ अनुलग्नक को संग्रहीत करता है। यह एपेक्स एप्लीकेशन विजार्ड का उपयोग करके बनाए गए फॉर्म और रिपोर्ट का रूप है जो सीधे टेबल की ओर इशारा करता है:
ब्लॉब टाइप की गई फ़ील्ड में दस्तावेज़ जोड़ना
रिपोर्ट क्वेरी नीचे दिखाए अनुसार काम करती प्रतीत होती है:
दस्तावेज़ अनुलग्नकों के साथ और रिकॉर्ड की सूची यहां दी गई है:
एकाधिक रिकॉर्ड के साथ नमूना रिपोर्ट आउटपुट
समस्या यह है कि BLOB फ़ील्ड में डाली गई फ़ाइल को डाउनलोड करने का प्रयास करते समय:
यह चित्र से सूक्ष्म है, लेकिन पहचाने गए माइम प्रकार:Application/Octet-Stream
यह एक संकेतक है कि एपेक्स फॉर्म ने फ़ाइल के प्रकार (माइक्रोसॉफ्ट वर्ड, डॉक्स) का ट्रैक खो दिया है जिसे मैंने अभी अपलोड किया था। सहेजी गई फ़ाइल कचरा पात्रों का एक गुच्छा मात्र है। फ़ाइल एक्सटेंशन को बदलने का प्रयास करने से भी कोई मदद नहीं मिलती है।
दूसरा (संशोधित) प्रयास:ब्लॉब/दस्तावेज़ हैंडलिंग के लिए एपेक्स एप्लिकेशन डिज़ाइन में समायोजन
यद्यपि विज़ार्ड के पूर्ण होने के तुरंत बाद अनुप्रयोग क्षेत्र और उनके घटक काम नहीं करते थे, इसे कार्यशील स्थिति में लाने के लिए केवल कुछ छोटे संपादन हैं। प्रपत्र तत्व PX_DOC_FILE
. का बारीकी से निरीक्षण दिखाता है कि BLOB प्रपत्र तत्वों को रिकॉर्ड से जुड़ी फ़ाइल के बारे में कुछ अतिरिक्त मेटा-सूचना की आवश्यकता होती है:
मैंने आगे बढ़कर अतिरिक्त स्तंभों को परिभाषित किया और इसे BLOB युक्त तालिका (MY_DOC_STACK), अपलोडिंग एपेक्स फॉर्म और रिपोर्ट क्षेत्र परिभाषा में जोड़ा।
ध्यान दें कि कॉलम नाम (सरलता के लिए) को ब्लॉब फॉर्म एलिमेंट DOC_FILE
की आवश्यकताओं के समान बनाया गया है ।
संशोधित दस्तावेज़ अनुलग्नक शीर्ष प्रपत्र
मैंने शुरू में सोचा था कि माइम प्रकार (msword, pdf, zip, आदि) के सभी संभावित मूल्यों का अनुमान लगाने के लिए चतुर होना चाहिए, लेकिन यह अनावश्यक था। इसी तरह वर्ण प्रकार और अंतिम अद्यतन कॉलम के लिए आरक्षित अन्य क्षेत्रों के लिए।
संशोधित दस्तावेज़ ब्लॉब अपलोड रिपोर्ट
संशोधित रिपोर्ट आउटपुट चर्चा
-
[मालिक:ऑड्रे हेपबर्न]:मैंने जबरदस्ती
MIME_TYPE
मेरे फॉर्म के साथ "एप्लिकेशन/एमएसवर्ड"; हालाँकि मैंने जो फ़ाइल अपलोड की थी वह ".docx" प्रकार की थी, इसे एपेक्स पेज के माध्यम से वापस डाउनलोड करने से इसे मेरे स्थानीय क्लाइंट को ".doc" प्रारूप (पुराने एमएस वर्ड प्रारूप) के रूप में सहेजा गया। -
[मालिक:CHEVY CHASE]:इस बार,
MIME_TYPE
इनपुट नहीं किया गया था और एपेक्स फॉर्म प्रक्रिया/कार्रवाई ने इसे बनाए जाने पर रिकॉर्ड में जोड़ा:application/vnd.openxmlformats-officedocument.wordprocessingml.document
यह संभवतः
Microsoft Office 2013
. द्वारा निर्दिष्ट प्रारूप है .FILE_NAME
value उपयोगकर्ता परिभाषित था और .docx एक्सटेंशन स्पष्ट रूप से जोड़ा गया था। परिणाम यह हुआ कि फ़ाइल डाउनलोड करने से उपयोगकर्ता डिफ़ॉल्ट रूप से मेरे क्लाइंट कंप्यूटर पर सही एप्लिकेशन का उपयोग करके फ़ाइल को खोलने के लिए प्रेरित हुआ:एमएस वर्ड (संस्करण 2013)। -
[मालिक:कैरी फिशर]:टेस्ट केस के समान (2) लेकिन इसके बजाय एडोब पीडीएफ (पोर्टेबल डॉक्यूमेंट फॉर्मेट) का उपयोग करना।
MIME_TYPE
. को छोड़कर समान व्यवहार खुद को एप्लिकेशन/पीडीएफ के रूप में पहचाना; फ़ाइल अपेक्षानुसार खोली गई।
अधिक चर्चा:
यह सारी परेशानी जेनेरिक डीएमएल एपीआई से है जो एपेक्स एप्लिकेशन के स्कीमा से इन्सर्ट, अपडेट और डिलीट को प्रबंधित करने के लिए उपयोग करता है, सबसे अधिक संभावना है कि यह एसक्यूएल इंजेक्शन हमलों के खिलाफ एपेक्स की सख्तता का हिस्सा है। सीधा INSERT
और SELECT
आपके SQL क्लाइंट में उपयोग किए गए कथन उसी तरह नहीं हैं जैसे DML लेनदेन को प्रबंधित करने के लिए एक डिफ़ॉल्ट फॉर्म डिज़ाइन (एक एप्लिकेशन विज़ार्ड से) सेट किया गया है।
ध्यान दें कि पृष्ठ प्रक्रिया:Process Row of MY_DOC_STACK
अधिक पैरामीटर संचालित दिखता है। अगर वहां कहीं डीएमएल ऑपरेशन है, तो यह सबसे पहले एपेक्स फॉर्म के माध्यम से सबमिट किए गए प्रत्येक इनपुट वेरिएबल की सावधानीपूर्वक स्क्रीनिंग पर आधारित होगा।
ऐसे कई अन्य तरीके हैं जिनसे एपेक्स डीएमएल लेनदेन का प्रबंधन कर सकता है; ... यह समाधान इस बात पर केंद्रित है कि ओपी द्वारा सबसे अधिक संभावित रूप से क्या सामना किया गया था।
शुभकामनाएँ!