Il modo in cui l'ho fatto è tenere un elenco di estensioni note e i loro tipi di mime e, se l'estensione non viene trovata, è sufficiente restituirla come application/octet-stream
. Il motivo è che questo tipo di mime viene applicato alle applicazioni (ad esempio, exe) che il browser, in base alle impostazioni di sicurezza, può consentire di passare al sistema operativo, aprendo in tal modo l'editor predefinito per quel tipo di file. A proposito, considera le implicazioni di sicurezza per ogni tipo di file che puoi accettare e trasferire agli utenti.
Ecco la lista Io generalmente uso:
<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>
Ecco un esempio di come usare questo (C# -come pseudocodice).
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, puoi mostrare un pezzo di codice nel controller che attraversa questa lista e tira il mime-type appropriato? Grazie mille per la tua risposta! – Godel
Mi dispiace, non posso. Sono tutte informazioni pubbliche (l'ho estratto da wikipedia e da altre fonti) ma il codice che ho usato per attraversarlo non è open source. Inoltre, la sua roba di configurazione 2.0, che è piuttosto pesante. Ti darò un esempio di come farlo, comunque. – Will
@Will Grazie per questa soluzione. La tua risposta ha quasi 2 anni. È ancora la tua soluzione preferita? – gsharp