2009-12-15 12 views
14

क्या कोई ऐसा फ़ंक्शन है जो फ़ाइल एक्सटेंशन के आधार पर सामग्री प्रकार लौटाता है?एक्सटेंशन द्वारा विस्तार प्रकार

+3

एक्सटेंशन आपको यह नहीं बताता कि सामग्री का प्रकार क्या है। इस पर भरोसा मत करो। –

+1

एनन की टिप्पणी का पालन करने के रूप में: एक्सटेंशन पूरी तरह से क्षणिक है इसलिए एक निष्पादन योग्य (.exe) आसानी से आपके आवेदन की अपेक्षाओं में से एक के नाम पर बदला जा सकता है और आपका एप्लिकेशन यह निर्धारित करने में सक्षम नहीं होगा कि नामित फ़ाइल वास्तव में कुछ है अन्य प्रकार –

उत्तर

16

मुझे नहीं पता कि। लेकिन आप इस कोड का उपयोग कर सकते हैं:

using Microsoft.Win32; 

RegistryKey key = Registry.ClassesRoot.OpenSubKey(extension); 
string contentType = key.GetValue("Content Type").ToString(); 

आपको त्रुटि प्रबंधन के लिए अतिरिक्त कोड जोड़ना होगा।

नोट: एक्सटेंशन को .txt में जैसे डॉट द्वारा पूर्ववर्ती करने की आवश्यकता है।

+2

क्या दूसरी दिशा जाने का कोई तरीका है? मेरे पास सामग्री प्रकार हैं और मैं उचित एक्सटेंशन के साथ सामग्री को कैश करना चाहता हूं। – Jordan

+2

@ जोर्डन: मेरा सुझाव है कि आप इसके साथ एक प्रश्न बनाएं। लोग वहां जवाब देंगे। – CesarGon

+0

@cesargon क्या ब्राउज़र को किसी भी फ़ाइल को डाउनलोड करना संभव है जिसका नाम और एक्सटेंशन क्वेरीस्ट्रिंग के माध्यम से पारित हो। अगर आप इसका उत्तर दे सकते हैं तो कृपया मेरा प्रश्न देखें। http://stackoverflow.com/questions/9927339 –

6

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

hth

अद्यतन: [स्रोत] [1]

public string GetMIMEType(string filepath) 
    { 
     FileInfo fileInfo = new FileInfo(filepath); 
     string fileExtension = fileInfo.Extension.ToLower(); 

     // direct mapping which is fast and ensures these extensions are found 
     switch (fileExtension) 
     { 
      case "htm": 
      case "html": 
       return "text/html"; 
      case "js": 
       return "text/javascript"; // registry may return "application/x-javascript" 
     } 



      // see if we can find extension info anywhere in the registry 
    //Note : there is not a ContentType key under ALL the file types , check Run --> regedit , then extensions !!! 

     RegistryPermission regPerm = new RegistryPermission(RegistryPermissionAccess.Read, @"\\HKEY_CLASSES_ROOT"); 

     // looks for extension with a content type 
     RegistryKey rkContentTypes = Registry.ClassesRoot.OpenSubKey(fileExtension); 
     if (rkContentTypes != null) 
     { 
      object key = rkContentTypes.GetValue("Content Type"); 
      if (key != null) 
       return key.ToString().ToLower(); 
     } 


     // looks for a content type with extension 
     // Note : This would be problem if multiple extensions associate with one content type. 
     RegistryKey typeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type"); 

     foreach (string keyname in typeKey.GetSubKeyNames()) 
     { 
      RegistryKey curKey = typeKey.OpenSubKey(keyname); 
      if (curKey != null) 
      { 
       object extension = curKey.GetValue("Extension"); 
       if (extension != null) 
       { 
        if (extension.ToString().ToLower() == fileExtension) 
        { 
         return keyname; 
        } 
       } 
      } 
     } 

     return null; 
    } 

[1]: एक http://www.codeproject.com/KB/dotnet/ContentType.aspx?msg=2903389#xx2903389xxenter code here

+0

मुझे लगता है कि mrblah विस्तार से सामग्री प्रकार ढूंढना चाहता है, न कि दूसरी तरफ। MIME डेटाबेस reg कुंजी में देखकर किसी दिए गए सामग्री प्रकार के लिए फ़ाइल एक्सटेंशन ढूंढना उपयोगी होगा। – CesarGon

+0

हाँ, आप सही हैं, मुझे लगता है, आपकी विधि \ HKEY_CLASSES_ROOT में दिखाई देगी। इसमें सामग्री प्रकार मैपिंग का विस्तार है। मेरे दृष्टिकोण का उपयोग करके आप मूल्य प्राप्त कर सकते हैं लेकिन यदि एकाधिक एक्सटेंशन एक सामग्री प्रकार से संबद्ध होते हैं तो यह समस्या होगी। – nayakam

+0

क्या ब्राउजर को ऐसी फ़ाइल डाउनलोड करने देना संभव है जिसका नाम और एक्सटेंशन क्वेरीस्ट्रिंग के माध्यम से पारित हो। अगर आप इसका उत्तर दे सकते हैं तो कृपया मेरा प्रश्न देखें। http://stackoverflow.com/questions/9927339 –

0

यहाँ है मैं ने लिखा है:

public string GetContentTypeByExtension(string strExtension) 
{ 
    switch (strExtension) 
    { 
     case ".fif": 

      return "application/fractals"; 
      break; 

     case ".hta": 

      return "application/hta"; 
      break; 

     case ".hqx": 

      return "application/mac-binhex40"; 
      break; 

     case ".vsi": 

      return "application/ms-vsi"; 
      break; 

     case ".p10": 

      return "application/pkcs10"; 
      break; 

     case ".p7m": 

      return "application/pkcs7-mime"; 
      break; 

     case ".p7s": 

      return "application/pkcs7-signature"; 
      break; 

     case ".cer": 

      return "application/pkix-cert"; 
      break; 

     case ".crl": 

      return "application/pkix-crl"; 
      break; 

     case ".ps": 

      return "application/postscript"; 
      break; 

     case ".setpay": 

      return "application/set-payment-initiation"; 
      break; 

     case ".setreg": 

      return "application/set-registration-initiation"; 
      break; 

     case ".sst": 

      return "application/vnd.ms-pki.certstore"; 
      break; 

     case ".pko": 

      return "application/vnd.ms-pki.pko"; 
      break; 

     case ".cat": 

      return "application/vnd.ms-pki.seccat"; 
      break; 

     case ".stl": 

      return "application/vnd.ms-pki.stl"; 
      break; 

     case ".wpl": 

      return "application/vnd.ms-wpl"; 
      break; 

     case ".xps": 

      return "application/vnd.ms-xpsdocument"; 
      break; 

     case ".z": 

      return "application/x-compress"; 
      break; 

     case ".tgz": 

      return "application/x-compressed"; 
      break; 

     case ".gz": 

      return "application/x-gzip"; 
      break; 

     case ".ins": 

      return "application/x-internet-signup"; 
      break; 

     case ".iii": 

      return "application/x-iphone"; 
      break; 

     case ".jtx": 

      return "application/x-jtx+xps"; 
      break; 

     case ".latex": 

      return "application/x-latex"; 
      break; 

     case ".nix": 

      return "application/x-mix-transfer"; 
      break; 

     case ".asx": 

      return "application/x-mplayer2"; 
      break; 

     case ".application": 

      return "application/x-ms-application"; 
      break; 

     case ".wmd": 

      return "application/x-ms-wmd"; 
      break; 

     case ".wmz": 

      return "application/x-ms-wmz"; 
      break; 

     case ".xbap": 

      return "application/x-ms-xbap"; 
      break; 

     case ".p12": 

      return "application/x-pkcs12"; 
      break; 

     case ".p7b": 

      return "application/x-pkcs7-certificates"; 
      break; 

     case ".p7r": 

      return "application/x-pkcs7-certreqresp"; 
      break; 

     case ".sit": 

      return "application/x-stuffit"; 
      break; 

     case ".tar": 

      return "application/x-tar"; 
      break; 

     case ".man": 

      return "application/x-troff-man"; 
      break; 

     case ".cer": 

      return "application/x-x509-ca-cert"; 
      break; 

     case ".zip": 

      return "application/x-zip-compressed"; 
      break; 

     case ".xaml": 

      return "application/xaml+xml"; 
      break; 

     case ".xml": 

      return "application/xml"; 
      break; 

     case ".aiff": 

      return "audio/aiff"; 
      break; 

     case ".au": 

      return "audio/basic"; 
      break; 

     case ".mid": 

      return "audio/mid"; 
      break; 

     case ".mid": 

      return "audio/midi"; 
      break; 

     case ".mp3": 

      return "audio/mp3"; 
      break; 

     case ".mp3": 

      return "audio/mpeg"; 
      break; 

     case ".m3u": 

      return "audio/mpegurl"; 
      break; 

     case ".mp3": 

      return "audio/mpg"; 
      break; 

     case ".wav": 

      return "audio/wav"; 
      break; 

     case ".aiff": 

      return "audio/x-aiff"; 
      break; 

     case ".mid": 

      return "audio/x-mid"; 
      break; 

     case ".mid": 

      return "audio/x-midi"; 
      break; 

     case ".mp3": 

      return "audio/x-mp3"; 
      break; 

     case ".mp3": 

      return "audio/x-mpeg"; 
      break; 

     case ".m3u": 

      return "audio/x-mpegurl"; 
      break; 

     case ".mp3": 

      return "audio/x-mpg"; 
      break; 

     case ".wax": 

      return "audio/x-ms-wax"; 
      break; 

     case ".wma": 

      return "audio/x-ms-wma"; 
      break; 

     case ".wav": 

      return "audio/x-wav"; 
      break; 

     case ".bmp": 

      return "image/bmp"; 
      break; 

     case ".gif": 

      return "image/gif"; 
      break; 

     case ".jpg": 

      return "image/jpeg"; 
      break; 

     case ".jpg": 

      return "image/pjpeg"; 
      break; 

     case ".png": 

      return "image/png"; 
      break; 

     case ".tiff": 

      return "image/tiff"; 
      break; 

     case ".ico": 

      return "image/x-icon"; 
      break; 

     case ".png": 

      return "image/x-png"; 
      break; 

     case ".mid": 

      return "midi/mid"; 
      break; 

     case ".dwfx": 

      return "model/vnd.dwfx+xps"; 
      break; 

     case ".css": 

      return "text/css"; 
      break; 

     case ".323": 

      return "text/h323"; 
      break; 

     case ".htm": 

      return "text/html"; 
      break; 

     case ".uls": 

      return "text/iuls"; 
      break; 

     case ".txt": 

      return "text/plain"; 
      break; 

     case ".wsc": 

      return "text/scriptlet"; 
      break; 

     case ".htt": 

      return "text/webviewhtml"; 
      break; 

     case ".htc": 

      return "text/x-component"; 
      break; 

     case ".vcf": 

      return "text/x-vcard"; 
      break; 

     case ".xml": 

      return "text/xml"; 
      break; 

     case ".avi": 

      return "video/avi"; 
      break; 

     case ".mpeg": 

      return "video/mpeg"; 
      break; 

     case ".mpeg": 

      return "video/mpg"; 
      break; 

     case ".avi": 

      return "video/msvideo"; 
      break; 

     case ".mpeg": 

      return "video/x-mpeg"; 
      break; 

     case ".mpeg": 

      return "video/x-mpeg2a"; 
      break; 

     case ".asx": 

      return "video/x-ms-asf"; 
      break; 

     case ".asx": 

      return "video/x-ms-asf-plugin"; 
      break; 

     case ".wm": 

      return "video/x-ms-wm"; 
      break; 

     case ".wmv": 

      return "video/x-ms-wmv"; 
      break; 

     case ".wmx": 

      return "video/x-ms-wmx"; 
      break; 

     case ".wvx": 

      return "video/x-ms-wvx"; 
      break; 

     case ".avi": 

      return "video/x-msvideo"; 
      break; 


    } 


} 
+1

आपके पास डुप्लिकेट केस स्टेटमेंट हैं –

1

यदि यह एक है अपलोड की गई फाइल जब आप फ़ाइल अपलोड करते हैं तो आप बाद में उपयोग के लिए डेटाबेस के कॉलम में सामग्री प्रकार को स्टोर कर सकते हैं। HttpPostedFile क्लास के लिए ContentType नाम की एक संपत्ति है।

4

चूंकि .NET Framework 4.5 एक वर्ग System.Web.MimeMapping है जिसमें अनुरोधित माइम प्रकार प्राप्त करने के तरीकों के साथ माइम प्रकारों की पूरी लाइब्रेरी है।

देखें: http://msdn.microsoft.com/en-us/library/system.web.mimemapping(v=vs.110).aspx

या GetMimeMapping के कार्यान्वयन के लिए: https://referencesource.microsoft.com/#System.Web/MimeMapping.cs

0

एक कम या ज्यादा पूरी सूची के लिए नीचे दिए गए नक्शे की जांच (सी ++, फिर भी यह सीधे आगे है सी # करने के लिए इसे बदलने के लिए)।

इस प्रकार Google/क्रोम सामग्री प्रकार फॉर्म फ़ाइल विस्तार को पहचानता है (पता नहीं कैसे ईमेल बॉडी उत्पन्न होता है - क्लाइंट पक्ष पर जावास्क्रिप्ट द्वारा, या सर्वर पक्ष पर POST से - मेरा अनुमान बाद वाला है)। मुझे निम्न सूची का उपयोग करके यह सूची मिली:

  1. इंटरनेट पर सबसे अधिक उपयोग की जाने वाली फ़ाइल सीमाओं के लिए खोजे गए। भाग्यशाली था कि एक HTML टेबल ढूंढें ताकि मैं इसे केवल सीमाओं की एक साफ सूची प्राप्त करने के लिए Excel में कॉपी-पेस्ट कर सकूं।

  2. सामग्री के कुछ पात्रों के साथ परीक्षण एक छोटी फ़ाइल बनाई गई।

  3. फ़ाइलों को बनाने के लिए (2) और कुछ कमांड लाइन जादू में सीमाओं की सूची का उपयोग किया गया test.TXT, test.HTM, test.TIFF और इसी तरह। लिनक्स संस्करण for file in test.TXT test.HTM test.TIFF ... ; do cp test "$file"; done;

  4. इन सभी फ़ाइलों को मेरे जीमेल में संलग्नक के रूप में भेजा गया है। ध्यान दें कि सुरक्षा कारणों से .exe और .zip जैसी कुछ फ़ाइलें फ़िल्टर की गई थीं। वे नीचे दिए गए कोड में गायब हैं!

  5. जीमेल में, मूल डाउनलोड किया गया, वहां कोई भी संलग्न फाइलों के लिए Content-Type: application/pdf; name="example.pdf" लाइन देख सकता है। विश्लेषण किया कि वीआईएम में नीचे दी गई सूची प्राप्त करें।

आप एक extention कि नीचे दी गई सूची में नहीं है जोड़ना चाहते हैं - छोटे फ़ाइल, sample.xyz बनाने खुद के लिए भेज और के लिए सामग्री प्रकार कच्चे ईमेल को देखो। वह चाल है। आशा करता हूँ की ये काम करेगा!

पीएस मुझे पता है कि यह सबसे अच्छी सूची नहीं है, लेकिन यह सीखना मेरे लिए पर्याप्त था कि कैसे प्रोग्राम संलग्न रूप से ईमेल अनुलग्नक भेजना है और फ़ाइल एक्सटेंशन द्वारा सामग्री-प्रकार का चयन करना उतना ही अच्छा होगा जितना जीमेल करेगा। अगर कुछ एक्सटेंशन प्रकार "गायब" हैं तो कठोर न हों।

static const map<string, string> ContentTypes = { 
     { "TXT","text/plain" }, 
     { "HTM","text/html" }, 
     { "TIFF","image/tiff" }, 
     { "TMP","application/octet-stream" }, 
     { "TOAST","application/octet-stream" }, 
     { "TORRENT","application/x-bittorrent" }, 
     { "TTF","application/x-font-ttf" }, 
     { "UUE","application/octet-stream" }, 
     { "VCD","application/x-cdlink" }, 
     { "VCF","text/x-vcard" }, 
     { "VCXPROJ","application/xml" }, 
     { "VOB","application/octet-stream" }, 
     { "WAV","audio/x-wav" }, 
     { "WMA","audio/x-ms-wma" }, 
     { "WMV","video/x-ms-wmv" }, 
     { "WPD","application/wordperfect" }, 
     { "WPS","application/octet-stream" }, 
     { "XCODEPROJ","application/octet-stream" }, 
     { "XHTML","application/xhtml+xml" }, 
     { "XLR","application/octet-stream" }, 
     { "XLS","application/vnd.ms-excel" }, 
     { "XLSX","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, 
     { "XML","text/xml" }, 
     { "YUV","application/octet-stream" }, 
     { "ZIPX","application/octet-stream" }, 
     { "3DM","application/octet-stream" }, 
     { "3DS","application/octet-stream" }, 
     { "3G2","video/3gpp2" }, 
     { "3GP","video/3gpp" }, 
     { "ACCDB","application/octet-stream" }, 
     { "AI","application/illustrator" }, 
     { "AIF","audio/x-aiff" }, 
     { "APK","application/vnd.android.package-archive" }, 
     { "APP","application/octet-stream" }, 
     { "ASF","video/x-ms-asf" }, 
     { "ASP","application/octet-stream" }, 
     { "ASPX","application/xml" }, 
     { "AVI","video/x-msvideo" }, 
     { "BAK","application/octet-stream" }, 
     { "BIN","application/octet-stream" }, 
     { "BMP","image/bmp" }, 
     { "C","text/x-csrc" }, 
     { "CAB","application/octet-stream" }, 
     { "CBR","application/octet-stream" }, 
     { "CER","application/x-x509-ca-cert" }, 
     { "CFG","application/octet-stream" }, 
     { "CFM","application/octet-stream" }, 
     { "CGI","application/octet-stream" }, 
     { "CLASS","application/octet-stream" }, 
     { "CPP","text/x-c++src" }, 
     { "CRDOWNLOAD","application/octet-stream" }, 
     { "CRX","application/x-chrome-extension" }, 
     { "CS","text/plain" }, 
     { "CSR","application/octet-stream" }, 
     { "CSS","text/css" }, 
     { "CSV","text/csv" }, 
     { "CUE","application/octet-stream" }, 
     { "CUR","application/octet-stream" }, 
     { "DAT","application/octet-stream" }, 
     { "DB","application/octet-stream" }, 
     { "DBF","application/octet-stream" }, 
     { "DDS","image/vnd.ms-dds" }, 
     { "DEB","application/x-debian-package" }, 
     { "DEM","application/octet-stream" }, 
     { "DESKTHEMEPACK","application/octet-stream" }, 
     { "DLL","application/octet-stream" }, 
     { "DMG","application/octet-stream" }, 
     { "DMP","application/octet-stream" }, 
     { "DOC","application/msword" }, 
     { "DOCX","application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, 
     { "DRV","application/octet-stream" }, 
     { "DTD","application/xml-dtd" }, 
     { "DWG","application/octet-stream" }, 
     { "DXF","application/dxf" }, 
     { "EPS","application/postscript" }, 
     { "FLA","application/octet-stream" }, 
     { "FLV","video/x-flv" }, 
     { "FNT","application/octet-stream+fnt" }, 
     { "FON","application/octet-stream+fon" }, 
     { "GADGET","application/octet-stream" }, 
     { "GAM","application/octet-stream" }, 
     { "GED","application/octet-stream" }, 
     { "GIF","image/gif" }, 
     { "GPX","application/gpx+xml" }, 
     { "GZ","application/x-gzip" }, 
     { "H","text/x-chdr" }, 
     { "HQX","application/mac-binhex40" }, 
     { "HTML","text/html" }, 
     { "ICNS","application/octet-stream" }, 
     { "ICO","image/x-icon" }, 
     { "ICS","text/calendar" }, 
     { "IFF","application/octet-stream" }, 
     { "INDD","application/octet-stream" }, 
     { "INI","application/octet-stream" }, 
     { "ISO","application/octet-stream" }, 
     { "JAVA","application/octet-stream" }, 
     { "JPG","image/jpeg" }, 
     { "JSP","application/octet-stream" }, 
     { "KEY","application/octet-stream" }, 
     { "KEYCHAIN","application/octet-stream" }, 
     { "KML","application/vnd.google-earth.kml+xml" }, 
     { "KMZ","application/vnd.google-earth.kmz" }, 
     { "LOG","application/octet-stream" }, 
     { "LUA","application/octet-stream" }, 
     { "M","application/octet-stream" }, 
     { "M3U","audio/x-mpegurl" }, 
     { "M4A","audio/mp4" }, 
     { "M4V","video/x-m4v" }, 
     { "MAX","application/octet-stream" }, 
     { "MDB","application/octet-stream" }, 
     { "MDF","application/octet-stream" }, 
     { "MID","audio/midi" }, 
     { "MIM","application/octet-stream" }, 
     { "MOV","video/quicktime" }, 
     { "MP3","audio/mpeg" }, 
     { "MP4","video/mp4" }, 
     { "MPA","audio/mpeg" }, 
     { "MPG","video/mpeg" }, 
     { "MSG","application/octet-stream" }, 
     { "NES","application/octet-stream" }, 
     { "OBJ","application/octet-stream" }, 
     { "ODT","application/vnd.oasis.opendocument.text" }, 
     { "OTF","application/vnd.oasis.opendocument.formula-template" }, 
     { "PAGES","application/x-iwork-pages-sffpages" }, 
     { "PART","application/octet-stream" }, 
     { "PCT","application/octet-stream" }, 
     { "PDB","chemical/x-pdb" }, 
     { "PDF","application/pdf" }, 
     { "PHP","application/x-httpd-php" }, 
     { "PKG","application/octet-stream" }, 
     { "PL","application/octet-stream" }, 
     { "PLUGIN","application/octet-stream" }, 
     { "PNG","image/png" }, 
     { "PPS","application/vnd.ms-powerpoint" }, 
     { "PPT","application/vnd.ms-powerpoint" }, 
     { "PPTX","application/vnd.openxmlformats-officedocument.presentationml.presentation" }, 
     { "PRF","application/pics-rules" }, 
     { "PS","application/postscript" }, 
     { "PSD","application/photoshop" }, 
     { "PSPIMAGE","application/octet-stream" }, 
     { "PY","application/octet-stream" }, 
     { "RM","audio/x-pn-realaudio" }, 
     { "ROM","application/octet-stream" }, 
     { "RPM","application/x-rpm" }, 
     { "RSS","application/octet-stream" }, 
     { "RTF","application/rtf" }, 
     { "SAV","application/octet-stream" }, 
     { "SDF","application/octet-stream" }, 
     { "SH","application/x-sh" }, 
     { "SITX","application/octet-stream" }, 
     { "SLN","text/plain" }, 
     { "SQL","application/octet-stream" }, 
     { "SRT","application/octet-stream" }, 
     { "SVG","image/svg+xml" }, 
     { "SWF","application/x-shockwave-flash" }, 
     { "SWIFT","application/octet-stream" }, 
     { "TAX2016","application/octet-stream" }, 
     { "TEX","application/x-tex" } 
    }; 
संबंधित मुद्दे