Esiste una funzione incorporata che restituisca il tipo di contenuto in base all'estensione del file?tipo di contenuto per estensione
risposta
Non che io sappia. Ma è possibile utilizzare questo codice:
using Microsoft.Win32;
RegistryKey key = Registry.ClassesRoot.OpenSubKey(extension);
string contentType = key.GetValue("Content Type").ToString();
È necessario aggiungere codice aggiuntivo per la gestione degli errori.
Nota: l'estensione deve essere preceduta da un punto, come in .txt
.
C'è un modo per andare nella direzione opposta? Dispongo di tipi di contenuto e desidero memorizzare nella cache il contenuto con l'estensione appropriata. – Jordan
@Jordan: ti suggerisco di creare una domanda con questo. La gente risponderà lì. – CesarGon
@cesargon E 'possibile consentire al browser di scaricare qualsiasi file il cui nome e l'estensione siano passati attraverso querystring. Per favore, vedi la mia domanda, se puoi rispondere a questo. http://stackoverflow.com/questions/9927339 –
FYKI, controllare il registro in \ HKEY_CLASSES_ROOT \ MIME \ Database \ Tipo contenuto. Ci sarà un elenco di tipo di contenuto ed estensione del file. Se è possibile caricare queste informazioni tramite Windows API, è possibile ottenere l'estensione del file per il mapping del tipo di contenuto.
hth
UPDATE: [fonte] [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
Penso che mrblah voglia trovare il tipo di contenuto dall'estensione, non il contrario. Guardando nella chiave del registro del database MIME sarebbe utile trovare le estensioni di file per un dato tipo di contenuto. – CesarGon
sì, hai ragione, credo, il tuo metodo cercherà in \ HKEY_CLASSES_ROOT. Ha estensione alla mappatura del tipo di contenuto. utilizzando il mio approccio è possibile ottenere il valore ma sarebbe un problema se più estensioni si associano a un tipo di contenuto. – nayakam
È possibile consentire al browser di scaricare qualsiasi file il cui nome e l'estensione siano passati attraverso querystring. Per favore, vedi la mia domanda, se puoi rispondere a questo. http://stackoverflow.com/questions/9927339 –
Ecco quello che ho scritto:
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;
}
}
Hai dichiarazioni di casi duplicati –
Se si tratta di un file caricato. È possibile memorizzare il tipo di contenuto in una colonna del database per un uso successivo quando si carica il file. Esiste una proprietà denominata ContentType per la classe HttpPostedFile.
Dal .Net Framework 4.5 c'è una classe System.Web.MimeMapping
che ha una libreria completa di tipi mime con metodi per ottenere il tipo mime richiesto.
See: http://msdn.microsoft.com/en-us/library/system.web.mimemapping(v=vs.110).aspx
o per l'attuazione del GetMimeMapping
: https://referencesource.microsoft.com/#System.Web/MimeMapping.cs
Per un elenco più o meno completa controllare la mappa in basso (C++, ma è semplice per cambiarlo in C#).
Questo è il modo in cui Google/Chrome riconosce l'estensione del file del tipo di contenuto (non so come viene generato il corpo dell'e-mail - da JavaScript sul lato client o da POST sul lato server - la mia ipotesi è quest'ultima). Ho ottenuto questo elenco utilizzando il seguente trucco:
Ha cercato estensioni di file più comunemente utilizzate su Internet. Ho avuto la fortuna di trovare una tabella html in modo da poterla copiare e incollare in Excel per ottenere una lista pulita delle estensioni.
Creato un file piccolo test con alcuni caratteri del contenuto.
usato la lista di estensioni in (2) e qualche riga di comando magia per creare file TEST.TXT, Test.htm, test.TIFF e così via. La variante di Linux è
for file in test.TXT test.HTM test.TIFF ... ; do cp test "$file"; done;
Invia tutti questi file alla mia gmail come allegati. Si noti che alcuni file come .exe e .zip sono stati filtrati per motivi di sicurezza. Mancano nel codice qui sotto!
In gmail, scaricato l'originale, è possibile vedere le righe
Content-Type: application/pdf; name="example.pdf"
per ciascuno dei file allegati. Analizzato quello in VIM per ottenere la lista qui sotto.
Se si desidera aggiungere un'estensione che non è nella lista qui sotto - Creare una mini sample.xyz, inviare a voi stessi e guardare le e-mail prima per Content-Type. Questo è il trucco. Spero che sia d'aiuto!
P.S. So che non è la lista migliore ma è stato sufficiente per me imparare come inviare gli allegati di posta elettronica al livello di programmazione e scegliere Content-Type per estensione del file come farebbe con gmail. Non essere duro se alcuni tipi di estensione sono "mancanti".
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" }
};
- 1. Estensione tipo categoria per variabili di istanza
- 2. Estensione del suggerimento del tipo per PHP
- 3. MVC 3 htmlhelper metodo di estensione per avvolgere il contenuto
- 4. tipo di contenuto per mp3 download response
- 5. F # - Tipo ampliamento VS Tipo estensione
- 6. Nginx predefinita tipo di contenuto
- 7. Estensione per Chrome: comunicazione tra contenuto script e background.html
- 8. Ottenere un identificatore di tipo uniforme per una determinata estensione
- 9. Estensione di un tipo esistente in OCaml
- 10. Modifica contenuto DOM con estensione Chrome
- 11. Estensione di un tipo nidificato a Swift
- 12. SQL: salvataggio di tipo MIME o estensione?
- 13. Estensione Batarang senza risultati di qualsiasi tipo
- 14. script di contenuto dell'inserzione di estensione chrome sull'azione del browser
- 15. estensione file .kt? Che tipo di file è questo?
- 16. Esiste un tipo di intestazione contenuto per l'aggiunta di HttpResponseHeader?
- 17. Estensione blocco contenuto iOS Caricamento di più file JSON
- 18. Qual è il tipo di contenuto HTTP per plinary binario?
- 19. Drupal 7 hook_menu per tipo di contenuto specifico
- 20. Come ottenere l'estensione predefinita per un determinato tipo di contenuto?
- 21. Quale tipo di struttura utilizzo per il contenuto HTML (MySQL)
- 22. Determina il tipo di contenuto richiesto?
- 23. Copia appunti/Incolla su contenuto script (estensione Chrome)
- 24. Tipo di contenuto Drupal (ristorante) Design
- 25. Android set tipo di contenuto HttpPost
- 26. impostazione tipo di contenuto in riposo assicurato
- 27. Tipo Famiglie estensione non funziona come descritto
- 28. AFNetworking tipo di contenuto atteso errore
- 29. MVC 6 ritorno cambiare tipo di contenuto
- 30. Imposta il tipo di contenuto sul BLOB
L'estensione non indica quale sia il tipo di contenuto. Non fare affidamento su di esso. –
Come seguito del commento di Anon: l'estensione è completamente transitoria quindi un file eseguibile (.exe) potrebbe facilmente essere rinominato in uno dei tipi che la tua applicazione si aspetta e la tua applicazione non sarebbe in grado di determinare che il file rinominato è in realtà un po ' altro tipo –