In a website running ASP.NET, how can I display an image stored in an MS Access 2007 Attachment Type -
पृष्ठभूमि:
एमएस एक्सेस 2007 एक अटैचमेंट फ़ील्ड प्रकार जोड़ता है, जहां छवियाँ संग्रहीत की जा सकती हैं .मैं एएसपी.नेट और .नेट फ्रेमवर्क 4 का उपयोग कर वेबसाइट बना रहा हूँ
तो, सिल्वरलाइट का उपयोग किए बिना, सर्वर पर एक्सेस डाटाबेस से छवि को पुनर्प्राप्त करने का सबसे आसान तरीका क्या है, और एक छवि नियंत्रण के स्रोत के रूप में उपयोग करें?
एक सरल उदाहरण के रूप में:
बच्चों के लिए एक ईएसएल वेबसाइट में, "ए" पर क्लिक करने से एक सेब दिखाई देगा; "बी" एक भालू, आदि
नोट :: यह एक ए 777 / ए 4010 अनुलग्नक क्षेत्र है, न कि बाइनरी ऑब्जेक्ट
आप छवि को डेटाबेस से बाहर बायनरी ब्लॉब के रूप में पढ़ सकते हैं। यह एक बाइट [] सरणी के रूप में पढ़ा जाएगा। उस बाइट [] को एक प्रतिक्रिया का उपयोग करके ब्राउज़र को भेजा जा सकता है। BinaryWrite और छवि / (प्रकार) - jpg / png / gif। सामग्री के प्रकार
कॉल कुछ ऐसा दिखेगा:
& lt; img src = "showmyimages.aspx? Image = id" / & gt;
और कोड थोड़ा दिखता है:
परिणाम = myWebService.GetImage (id);
यदि (परिणाम! = नल) & amp; amp; परिणाम। लैंग & gt; 0 {संदर्भ। रिस्पॉन्स। क्लीयर कंटेंट (); Context.Response.ClearHeaders (); संदर्भ। उत्तरप्रेषण। कॉन्टैक्ट टाइप = "चित्र / जीआईएफ"; संदर्भ। रिस्पॉन्स। एडहैडर ("कंटेंट-लम्बाई", परिणाम। लांघ। टॉस्ट्रिंग (सिस्टम। ग्लोलाइज़ेशन.कल्चर इन्फ़ो। कंटेंटकल्चर)); Context.Response.AddHeader ("सामग्री-स्वभाव", स्ट्रिंग.फॉर्मेट ("इनलाइन; फाइलनाम = {0} .gif", फ़ाइल नाम)); Context.Response.BinaryWrite (परिणाम); Context.Response.End (); }
यह छवि का फ़ाइल नाम थोड़ा सा छिपता है, लेकिन यह बाइनरी डिस्क पर स्थायी छवि के बिना डेटाबेस से सीधे पढ़ने की अनुमति देता है।
संपादित करें:
मैंने अटैचमेंट फ़ील्ड के बारे में पढ़ा हुआ सब कुछ यह है कि यह डाटाबेस में प्रत्यक्ष बाइनरी के रूप में भंडारित करता है, जैसे कि यह सीधे किसी फ़ाइल में सहेज कर रहा था। मैं इस संबंध में किसी भी कोड लिखने की कोशिश नहीं की है, लेकिन यह कल्पना है कि कोई रूपांतरण के लिए आवश्यक है बाइनरी डेटा एक StreamReader में खिलाया जा सकता है, संभवतः भी का इस्तेमाल कर रही है WebResponse.GetResponseStream ()
संपादित करें:
मैं निम्नलिखित कोड का उपयोग कर एक हैंडलर को कार्यान्वित करने में सक्षम था जो वास्तव में संलग्नक फ़ील्ड से बाइनरी डेटा खींचता है (जो डीबगर में सत्यापित किया जा सकता है), लेकिन वहां दिखाई देता है कोई एन्कोडिंग शामिल है कि में बनाया नहीं है किया जाना है। कुंजी का चयन करें बयान है कि पुन: प्राप्त करता इसमें कुछ तरीके भी शामिल हैं जो माइक्रोसॉफ्ट ऑफिस इंटरओप लायब्रेरी में उपयोग किए जा सकते हैं। वे लोड करने और फ़ाइलों को सहेजने का वर्णन करते हैं, लेकिन ऐसा लगता है कि वे समान ऑब्जेक्ट स्ट्रीम करने के लिए सीधे समान कार्य करने में सक्षम हो सकते हैं। संदर्भ fldImage.FileData हो रहा है।
सार्वजनिक शून्य ProcessRequest (HttpContext संदर्भ) { स्ट्रिंग क्यूरी = "चुनें [इमेज], आईडी, [इमेज। फिलेडेटा] एएस फाइलडेटा"; Qry + = "[छवियाँ। छवि.फ़ाइलनाम] AS फ़ाइल का नाम, [छवियाँ। छवि। फाइल प्रकार] AS filetype"; Qry + = "छवियों से कहाँ (आईडी = 1)"; स्ट्रिंग कनेक्ट = @ "प्रदाता = माइक्रोसॉफ्ट। एएसीई। ओएलईडीबी .12.0; निरंतर सुरक्षा जानकारी = गलत; डेटा स्रोत = ## पथटाओडीबी ## \ डाटाबेस 1.एसीएडीबी"; का उपयोग करते हुए (OleDbConnection Conn = नए OleDbConnection (कनेक्ट)) {अगर (context.Request.QueryString [ "आईडी"] = अशक्त!) {OleDbCommand cmd = नए OleDbCommand (qry, कनेक्टिकट); Cmd.Parameters.AddWithValue ("ID", context.Request.QueryString ["id"]); conn.Open (); (OleDbDataReader rdr = cmd.ExecuteReader ()) का उपयोग करते हुए {if (rdr.HasRows) {rdr.Read (); context.Response.ClearContent (); context.Response.ClearHeaders (); Context.Response.ContentType = "image /" + rdr ["फ़ाइल प्रकार"]; बाइट [] परिणाम = एन्कोडिंग.UTF8.GetBytes (rdr ["FileData"]। ToString ()); Context.Response.AddHeader ("सामग्री-लंबाई", परिणाम। लांघ। टॉस्ट्रिंग (सिस्टम। ग्लोलाइज़ेशन.कल्चरइनफा.कंटेंटकल्चर)); Context.Response.AddHeader ("सामग्री-स्वभाव", स्ट्रिंग.फ़ॉर्मेट ("अनुलग्नक; फ़ाइल नाम = {0}", आरडीआर ["फ़ाइलनाम"])); context.Response.BinaryWrite (परिणाम); context.Response.End (); }}}}}
Microsoft.Office.Interop.Access.Dao
है इसे जोड़ते समय, COM टैब पर जाएं और Microsoft Office 12.0 एक्सेस डेटाबेस इंजिन ऑब्जेक्ट लाइब्रेरी
के लिए देखें। मैंने "स्ट्रीम करने के लिए सीधे" सिद्धांत का परीक्षण नहीं किया है।
Comments
Post a Comment