2012-03-24 9 views
9

मुझे कुछ फ़ाइल अपलोड के लिए "सामग्री-प्रकार" शीर्षलेख भरने के उद्देश्य से माइम प्रकार का अनुमान लगाने की आवश्यकता है।डेल्फी XE2 पर माइम प्रकार का अनुमान लगाने का कोई तरीका?

मुझे इसके लिए कोई समाधान नहीं मिला।

मैं कुछ ऐसा कहना चाहता हूं: GetMimeType('C:File.jpg') और image/jpg वापस प्राप्त करें।

मल्टीप्लाटाफॉर्म (जीत/ओएसएक्स के लिए) सबसे अच्छा है, लेकिन केवल खिड़कियों के लिए पर्याप्त होगा।

उत्तर

5

इंटरनेट डायरेक्ट (इंडी) इस के लिए एक वर्ग शामिल हैं:

वर्ग TIdThreadSafeMimeTable

इकाई में

IdCustomHTTPServer

एक HTTP सर्वर आवेदन में

कोड उदाहरण:

Response.ContentType := 
    Response.HTTPServer.MIMETable.GetFileMIMEType(FileName); 
5

आप कितने फाइल प्रकार के बारे में बात कर रहे हैं? शायद आप केवल उन प्रकार की सूची बना सकते हैं जिन्हें आप समर्थन देना चाहते हैं।

मैं इन सूचियों कल्पना कर सकते हैं और साथ ही इंटरनेट पर उपलब्ध होने के लिए,

बसका उपयोग कर फ़ाइल एक्सटेंशन प्राप्त करेंऔर उन सूचियों में से एक को दोबारा जांचें। फ़ाइल में माइम प्रकार नहीं होता है, इसलिए आपको फ़ाइल एक्सटेंशन की इस सूची का उपयोग करने की आवश्यकता होगी, या फ़ाइल हेडर पढ़ने के प्रकार को निर्धारित करना होगा, जो कठिन और अविश्वसनीय है।

9

FindMimeFromData फ़ंक्शन का उपयोग करने का प्रयास करें।

FindMimeFromData (वर्तमान में 26) अलग MIME प्रकार (Known MIME Types देखें) के लिए हार्ड-कोडेड परीक्षण में शामिल है। इसका अर्थ यह है कि यदि किसी दिए गए बफर में इन एमआईएम प्रकारों में से किसी एक के प्रारूप में डेटा शामिल है, तो ढूँढें FindMimeFromData में मौजूद है जो संबंधित MIME प्रकार को पहचानने के लिए डिज़ाइन किया गया है (बफर सामग्री के माध्यम से स्कैन करके)।

function FindMimeFromData(
    pBC: IBindCtx;      // bind context - can be nil 
    pwzUrl: LPCWSTR;     // url - can be nil 
    pBuffer: Pointer;     // buffer with data to sniff - can be nil (pwzUrl must be valid) 
    cbSize: DWORD;      // size of buffer 
    pwzMimeProposed: LPCWSTR;   // proposed mime if - can be nil 
    dwMimeFlags: DWORD;     // will be defined 
    out ppwzMimeOut: LPWSTR;   // the suggested mime 
    dwReserved: DWORD     // must be 0 
): HResult; stdcall; 

इसके अलावा इस लेख urlmon.pas से देखने के लिए गर्म यह MIME Type Detection in Internet Explorer

7

आईई GetClassFileOrMime और FindMimeFromData API का उपयोग करता डेटा/फ़ाइलों के माइम प्रकार (डेल्फी में UrlMon इकाई का पता लगाने के काम करता है)।

MIME Type Detection in Internet Explorer

CLSID लौटे GetClassFileOrMimeHKEY_CLASSES_ROOT\CLSID\<clsid>\MimeTypes के तहत रजिस्ट्री में स्थित किया जा सकता है से। (FileExtensions, FriendlyName)।

रजिस्ट्री में एक MIME डेटाबेस भी है: HKEY_CLASSES_ROOT\MIME\Database\Content Type

लेकिन चूंकि known MIME types की सूची अपेक्षाकृत छोटी है तो आप इसे संसाधन XML (या जो कुछ भी) के रूप में पकड़ सकते हैं और इसे वहां से ला सकते हैं। यह विंडोज और ओएसएक्स दोनों को supprt होगा।


फ़ाइल अपलोड ऑपरेशन के लिए आप हमेशा application/octet-stream का उपयोग कर सकते हैं।
इंडी TIdMimeTable वर्ग (IdGlobal) है और यह एक निश्चित सूची का उपयोग करता है और रजिस्ट्री HKEY_CLASSES_ROOT का निरीक्षण करता है (FillMimeTable देखें)। यदि कोई मिलान नहीं मिला application/octet-stream का उपयोग किया जाता है।
आपको फ़ाइल अपलोड होने के बाद सर्वर की ओर से सामग्री फ़ाइल का निरीक्षण करना चाहिए, और हेडर पर भरोसा नहीं करना चाहिए क्योंकि ContentType क्लाइंट पक्ष पर छेड़छाड़ की जा सकती है, और सर्वर पर रजिस्ट्री के साथ मेल नहीं खाती साइड।

संबंधित मुद्दे