Die Art, wie ich es getan habe, ist eine Liste von bekannten Erweiterungen und deren MIME-Typen zu führen, und wenn die Erweiterung nicht gefunden wird, dann geben Sie sie einfach als application/octet-stream
zurück. Der Grund dafür ist, dass dieser MIME-Typ auf Anwendungen (z. B. EXE) angewendet wird, die der Browser je nach Sicherheitseinstellungen möglicherweise an das Betriebssystem weitergeben kann, wodurch der Standardeditor für diesen Dateityp geöffnet wird. Bedenken Sie außerdem die Auswirkungen auf die Sicherheit für jede Art von Datei, die Sie akzeptieren und an Benutzer übertragen können.
Hier ist die Liste, die ich verwende in der Regel:
<MimeTypes>
<MimeType Type="application/mac-binhex40" Extensions=".hqx"/>
<MimeType Type="application/msword" Extensions=".doc;.docx"/>
<MimeType Type="application/pdf" Extensions=".pdf"/>
<MimeType Type="application/postscript" Extensions=".ai;.eps;.ps"/>
<MimeType Type="application/rtf" Extensions=".rtf"/>
<MimeType Type="application/vnd.ms-excel"
Extensions=".xla;.xlc;.xlm;.xls;.xlt;.xlw;.xlsx"/>
<MimeType Type="application/vnd.ms-outlook" Extensions=".msg"/>
<MimeType Type="application/vnd.ms-powerpoint"
Extensions=".pot;.pps;.ppt;.pptx"/>
<MimeType Type="application/vnd.ms-works" Extensions=".wcm;.wdb;.wks;.wps"/>
<MimeType Type="application/x-compress" Extensions=".z"/>
<MimeType Type="application/x-compressed" Extensions=".tgz"/>
<MimeType Type="application/x-gzip" Extensions=".gz"/>
<MimeType Type="application/x-msaccess" Extensions=".mdb"/>
<MimeType Type="application/x-msmetafile" Extensions=".wmf"/>
<MimeType Type="application/x-mspublisher" Extensions=".pub"/>
<MimeType Type="application/x-msschedule" Extensions=".scd"/>
<MimeType Type="application/x-msterminal" Extensions=".trm"/>
<MimeType Type="application/x-mswrite" Extensions=".wri"/>
<MimeType Type="application/x-tar" Extensions=".tar"/>
<MimeType Type="application/zip" Extensions=".zip"/>
<MimeType Type="audio/basic" Extensions=".au;.snd"/>
<MimeType Type="audio/mid" Extensions=".mid;.rmi"/>
<MimeType Type="audio/mpeg" Extensions=".mp3"/>
<MimeType Type="audio/x-aiff" Extensions=".aif;.aifc;.aiff"/>
<MimeType Type="audio/x-pn-realaudio" Extensions=".ra;.ram"/>
<MimeType Type="audio/x-wav" Extensions=".wav"/>
<MimeType Type="image/bmp" Extensions=".bmp"/>
<MimeType Type="image/gif" Extensions=".gif"/>
<MimeType Type="image/jpeg" Extensions=".jpe;.jpeg;.jpg"/>
<MimeType Type="image/pipeg" Extensions=".jfif"/>
<MimeType Type="image/tiff" Extensions=".tif;.tiff"/>
<!--Substitute the following two for text/plain if you're sure bad html
won't get rendered in the browser-->
<!--<MimeType Type="text/html" Extensions=".mht;.html;.htm"/>-->
<!--<MimeType Type="text/plain" Extensions=".txt"/>-->
<MimeType Type="text/plain" Extensions=".txt;.html;.htm"/>
<MimeType Type="text/richtext" Extensions=".rtx"/>
<MimeType Type="text/tab-separated-values" Extensions=".tsv"/>
<MimeType Type="video/mpeg" Extensions=".mp2;.mpa;.mpe;.mpeg;.mpg;.mpv2"/>
<MimeType Type="video/quicktime" Extensions=".mov;.qt"/>
<MimeType Type="video/x-la-asf" Extensions=".lsf;.lsx;.asf;.asr;.asx;"/>
<MimeType Type="video/x-msvideo" Extensions=".avi"/>
</MimeTypes>
Hier ist ein Beispiel dafür, wie diese (C# -ähnliche Pseudo-Code) zu verwenden.
public string GetMimeType(string ext)
{
// who would load the file on every method call? That's just dumb
var mimes = XElement.Load("MyMimeTypesLolKThx.xml");
var result = from x in mimes.Elements()
where Contains(x, ext)
select x.Attribute("Type");
return result.FirstOrDefault() ?? "application/octet-stream";
}
public bool Contains(XElement el, string ext)
{
return el.Attribute("Extensions").Value.Contains(ext);
}
@Will, können Sie zeigen, Stück des Codes in der Steuerung, die diese Liste durchläuft und zieht die entsprechende Mime-Typ? Vielen Dank für Ihre Antwort! – Godel
Sorry, kann nicht. Dies ist alles öffentliche Information (ich habe es aus Wikipedia und anderen Quellen herausgeholt), aber der Code, den ich benutzt habe, ist nicht Open Source. Nebenbei, seine 2.0 Konfiguration Zeug, das ziemlich schwer ist. Ich gebe Ihnen jedoch eine Probe, wie es geht. – Will
@Will Danke für diese Lösung. Ihre Antwort ist fast 2 Jahre alt. Ist es immer noch Ihre bevorzugte Lösung? – gsharp