Created
October 18, 2018 17:40
-
-
Save jkereako/88641b5a432c3c6c9ac4bdb76ed81085 to your computer and use it in GitHub Desktop.
Xamarin.Forms: Downloads binary files and writes them to disk.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Net.Http; | |
using System.Security.Cryptography; | |
using System.Text; | |
using System.Text.RegularExpressions; | |
using System.Threading.Tasks; | |
using Xamarin.Essentials; | |
namespace App.Services | |
{ | |
public class BinaryFileService | |
{ | |
private string TempDataStorageDirectory { get; } | |
private HttpClient HttpClient { get; } | |
private HashAlgorithm HashAlgorithm { get; } | |
public BinaryFileService() | |
{ | |
TempDataStorageDirectory = FileSystem.AppDataDirectory; | |
HttpClient = new HttpClient(); | |
HashAlgorithm = MD5.Create(); | |
} | |
public Uri GetLocalCachePath(Uri uri) | |
{ | |
string localPath = GetLocalPath(uri); | |
return File.Exists(localPath) ? new Uri(localPath) : null; | |
} | |
public async Task<Uri> DownloadBinaryFileAsync(Uri uri) | |
{ | |
bool success = IsBinaryFile(uri); | |
if (!success) | |
{ | |
throw new ArgumentException( | |
$"MIME unrecognized or is not a binary MIME type: {uri.AbsoluteUri}" | |
); | |
} | |
byte[] bytes = await HttpClient.GetByteArrayAsync(uri); | |
string localPath = GetLocalPath(uri); | |
File.WriteAllBytes(localPath, bytes); | |
return new Uri(localPath); | |
} | |
private bool IsBinaryFile(Uri uri) | |
{ | |
Mime mime = MimeDataStore.GetMime( | |
GetFileExtension(uri) | |
); | |
return mime != null && mime.IsBinary == true; | |
} | |
private string Hash(Uri uri) | |
{ | |
byte[] digest = HashAlgorithm.ComputeHash( | |
Encoding.UTF8.GetBytes(uri.AbsoluteUri) | |
); | |
return Convert.ToBase64String(digest, 0, digest.Length); | |
} | |
private string GetLocalPath(Uri uri) | |
{ | |
// Make the filename a hash of the URI so that files of the same | |
// name can be stored in the same directory. | |
string hashedUri = Hash(uri); | |
string name = SanitizeFileName(hashedUri); | |
string extension = GetFileExtension(uri); | |
return Path.Combine(TempDataStorageDirectory, name + extension); | |
} | |
private string SanitizeFileName(string fileName) | |
{ | |
// Remove all special characters | |
return Regex.Replace( | |
fileName, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled | |
); | |
} | |
private string GetFileExtension(Uri uri) | |
{ | |
string fileName = System.IO.Path.GetFileName(uri.LocalPath); | |
return System.IO.Path.GetExtension(fileName); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
namespace App.Models | |
{ | |
public class Mime | |
{ | |
public string Extension { get; } | |
public string Type { get; } | |
public bool IsBinary { get; } | |
public Mime(string extension, string type, bool isBinary) | |
{ | |
Extension = extension; | |
Type = type; | |
IsBinary = isBinary; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
namespace App.DataStores | |
{ | |
public class MimeDataStore | |
{ | |
private static IList<Mime> Mimes = new List<Mime>() { | |
// combination of values from Windows 7 Registry and | |
// from C:\Windows\System32\inetsrv\config\applicationHost.config | |
// some added, including .7z and .dat | |
new Mime(".323", "text/h323", false), | |
new Mime(".3g2", "video/3gpp2", true), | |
new Mime(".3gp", "video/3gpp", true), | |
new Mime(".3gp2", "video/3gpp2", true), | |
new Mime(".3gpp", "video/3gpp", true), | |
new Mime(".7z", "application/x-7z-compressed", true), | |
new Mime(".aa", "audio/audible", true), | |
new Mime(".AAC", "audio/aac", true), | |
new Mime(".aaf", "application/octet-stream", false), | |
new Mime(".aax", "audio/vnd.audible.aax", true), | |
new Mime(".ac3", "audio/ac3", true), | |
new Mime(".aca", "application/octet-stream", false), | |
new Mime(".accda", "application/msaccess.addin", false), | |
new Mime(".accdb", "application/msaccess", false), | |
new Mime(".accdc", "application/msaccess.cab", false), | |
new Mime(".accde", "application/msaccess", false), | |
new Mime(".accdr", "application/msaccess.runtime", false), | |
new Mime(".accdt", "application/msaccess", false), | |
new Mime(".accdw", "application/msaccess.webapplication", false), | |
new Mime(".accft", "application/msaccess.ftemplate", false), | |
new Mime(".acx", "application/internet-property-stream", false), | |
new Mime(".AddIn", "text/xml", false), | |
new Mime(".ade", "application/msaccess", false), | |
new Mime(".adobebridge", "application/x-bridge-url", false), | |
new Mime(".adp", "application/msaccess", false), | |
new Mime(".ADT", "audio/vnd.dlna.adts", true), | |
new Mime(".ADTS", "audio/aac", true), | |
new Mime(".afm", "application/octet-stream", false), | |
new Mime(".ai", "application/postscript", false), | |
new Mime(".aif", "audio/x-aiff", true), | |
new Mime(".aifc", "audio/aiff", true), | |
new Mime(".aiff", "audio/aiff", true), | |
new Mime(".air", "application/vnd.adobe.air-application-installer-package+zip", false), | |
new Mime(".amc", "application/x-mpeg", false), | |
new Mime(".application", "application/x-ms-application", false), | |
new Mime(".art", "image/x-jg", false), | |
new Mime(".asa", "application/xml", false), | |
new Mime(".asax", "application/xml", false), | |
new Mime(".ascx", "application/xml", false), | |
new Mime(".asd", "application/octet-stream", false), | |
new Mime(".asf", "video/x-ms-asf", true), | |
new Mime(".ashx", "application/xml", false), | |
new Mime(".asi", "application/octet-stream", false), | |
new Mime(".asm", "text/plain", false), | |
new Mime(".asmx", "application/xml", false), | |
new Mime(".aspx", "application/xml", false), | |
new Mime(".asr", "video/x-ms-asf", true), | |
new Mime(".asx", "video/x-ms-asf", true), | |
new Mime(".atom", "application/atom+xml", false), | |
new Mime(".au", "audio/basic", true), | |
new Mime(".avi", "video/x-msvideo", true), | |
new Mime(".axs", "application/olescript", false), | |
new Mime(".bas", "text/plain", false), | |
new Mime(".bcpio", "application/x-bcpio", false), | |
new Mime(".bin", "application/octet-stream", false), | |
new Mime(".bmp", "image/bmp", false), | |
new Mime(".c", "text/plain", false), | |
new Mime(".cab", "application/octet-stream", false), | |
new Mime(".caf", "audio/x-caf", true), | |
new Mime(".calx", "application/vnd.ms-office.calx", false), | |
new Mime(".cat", "application/vnd.ms-pki.seccat", false), | |
new Mime(".cc", "text/plain", false), | |
new Mime(".cd", "text/plain", false), | |
new Mime(".cdda", "audio/aiff", true), | |
new Mime(".cdf", "application/x-cdf", false), | |
new Mime(".cer", "application/x-x509-ca-cert", false), | |
new Mime(".chm", "application/octet-stream", false), | |
new Mime(".class", "application/x-java-applet", false), | |
new Mime(".clp", "application/x-msclip", false), | |
new Mime(".cmx", "image/x-cmx", false), | |
new Mime(".cnf", "text/plain", false), | |
new Mime(".cod", "image/cis-cod", false), | |
new Mime(".config", "application/xml", false), | |
new Mime(".contact", "text/x-ms-contact", false), | |
new Mime(".coverage", "application/xml", false), | |
new Mime(".cpio", "application/x-cpio", false), | |
new Mime(".cpp", "text/plain", false), | |
new Mime(".crd", "application/x-mscardfile", false), | |
new Mime(".crl", "application/pkix-crl", false), | |
new Mime(".crt", "application/x-x509-ca-cert", false), | |
new Mime(".cs", "text/plain", false), | |
new Mime(".csdproj", "text/plain", false), | |
new Mime(".csh", "application/x-csh", false), | |
new Mime(".csproj", "text/plain", false), | |
new Mime(".css", "text/css", false), | |
new Mime(".csv", "text/csv", false), | |
new Mime(".cur", "application/octet-stream", false), | |
new Mime(".cxx", "text/plain", false), | |
new Mime(".dat", "application/octet-stream", false), | |
new Mime(".datasource", "application/xml", false), | |
new Mime(".dbproj", "text/plain", false), | |
new Mime(".dcr", "application/x-director", false), | |
new Mime(".def", "text/plain", false), | |
new Mime(".deploy", "application/octet-stream", false), | |
new Mime(".der", "application/x-x509-ca-cert", false), | |
new Mime(".dgml", "application/xml", false), | |
new Mime(".dib", "image/bmp", false), | |
new Mime(".dif", "video/x-dv", true), | |
new Mime(".dir", "application/x-director", false), | |
new Mime(".disco", "text/xml", false), | |
new Mime(".dll", "application/x-msdownload", false), | |
new Mime(".dll.config", "text/xml", false), | |
new Mime(".dlm", "text/dlm", false), | |
new Mime(".doc", "application/msword", false), | |
new Mime(".docm", "application/vnd.ms-word.document.macroEnabled.12", false), | |
new Mime(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", false), | |
new Mime(".dot", "application/msword", false), | |
new Mime(".dotm", "application/vnd.ms-word.template.macroEnabled.12", false), | |
new Mime(".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template", false), | |
new Mime(".dsp", "application/octet-stream", false), | |
new Mime(".dsw", "text/plain", false), | |
new Mime(".dtd", "text/xml", false), | |
new Mime(".dtsConfig", "text/xml", false), | |
new Mime(".dv", "video/x-dv", false), | |
new Mime(".dvi", "application/x-dvi", false), | |
new Mime(".dwf", "drawing/x-dwf", false), | |
new Mime(".dwp", "application/octet-stream", false), | |
new Mime(".dxr", "application/x-director", false), | |
new Mime(".eml", "message/rfc822", false), | |
new Mime(".emz", "application/octet-stream", false), | |
new Mime(".eot", "application/octet-stream", false), | |
new Mime(".eps", "application/postscript", false), | |
new Mime(".etl", "application/etl", false), | |
new Mime(".etx", "text/x-setext", false), | |
new Mime(".evy", "application/envoy", false), | |
new Mime(".exe", "application/octet-stream", false), | |
new Mime(".exe.config", "text/xml", false), | |
new Mime(".fdf", "application/vnd.fdf", false), | |
new Mime(".fif", "application/fractals", false), | |
new Mime(".filters", "Application/xml", false), | |
new Mime(".fla", "application/octet-stream", false), | |
new Mime(".flr", "x-world/x-vrml", false), | |
new Mime(".flv", "video/x-flv", true), | |
new Mime(".fsscript", "application/fsharp-script", false), | |
new Mime(".fsx", "application/fsharp-script", false), | |
new Mime(".generictest", "application/xml", false), | |
new Mime(".gif", "image/gif", false), | |
new Mime(".group", "text/x-ms-group", false), | |
new Mime(".gsm", "audio/x-gsm", true), | |
new Mime(".gtar", "application/x-gtar", false), | |
new Mime(".gz", "application/x-gzip", false), | |
new Mime(".h", "text/plain", false), | |
new Mime(".hdf", "application/x-hdf", false), | |
new Mime(".hdml", "text/x-hdml", false), | |
new Mime(".hhc", "application/x-oleobject", false), | |
new Mime(".hhk", "application/octet-stream", false), | |
new Mime(".hhp", "application/octet-stream", false), | |
new Mime(".hlp", "application/winhlp", false), | |
new Mime(".hpp", "text/plain", false), | |
new Mime(".hqx", "application/mac-binhex40", false), | |
new Mime(".hta", "application/hta", false), | |
new Mime(".htc", "text/x-component", false), | |
new Mime(".htm", "text/html", false), | |
new Mime(".html", "text/html", false), | |
new Mime(".htt", "text/webviewhtml", false), | |
new Mime(".hxa", "application/xml", false), | |
new Mime(".hxc", "application/xml", false), | |
new Mime(".hxd", "application/octet-stream", false), | |
new Mime(".hxe", "application/xml", false), | |
new Mime(".hxf", "application/xml", false), | |
new Mime(".hxh", "application/octet-stream", false), | |
new Mime(".hxi", "application/octet-stream", false), | |
new Mime(".hxk", "application/xml", false), | |
new Mime(".hxq", "application/octet-stream", false), | |
new Mime(".hxr", "application/octet-stream", false), | |
new Mime(".hxs", "application/octet-stream", false), | |
new Mime(".hxt", "text/html", false), | |
new Mime(".hxv", "application/xml", false), | |
new Mime(".hxw", "application/octet-stream", false), | |
new Mime(".hxx", "text/plain", false), | |
new Mime(".i", "text/plain", false), | |
new Mime(".ico", "image/x-icon", false), | |
new Mime(".ics", "application/octet-stream", false), | |
new Mime(".idl", "text/plain", false), | |
new Mime(".ief", "image/ief", false), | |
new Mime(".iii", "application/x-iphone", false), | |
new Mime(".inc", "text/plain", false), | |
new Mime(".inf", "application/octet-stream", false), | |
new Mime(".inl", "text/plain", false), | |
new Mime(".ins", "application/x-internet-signup", false), | |
new Mime(".ipa", "application/x-itunes-ipa", false), | |
new Mime(".ipg", "application/x-itunes-ipg", false), | |
new Mime(".ipproj", "text/plain", false), | |
new Mime(".ipsw", "application/x-itunes-ipsw", false), | |
new Mime(".iqy", "text/x-ms-iqy", false), | |
new Mime(".isp", "application/x-internet-signup", false), | |
new Mime(".ite", "application/x-itunes-ite", false), | |
new Mime(".itlp", "application/x-itunes-itlp", false), | |
new Mime(".itms", "application/x-itunes-itms", false), | |
new Mime(".itpc", "application/x-itunes-itpc", false), | |
new Mime(".IVF", "video/x-ivf", true), | |
new Mime(".jar", "application/java-archive", false), | |
new Mime(".java", "application/octet-stream", false), | |
new Mime(".jck", "application/liquidmotion", false), | |
new Mime(".jcz", "application/liquidmotion", false), | |
new Mime(".jfif", "image/pjpeg", false), | |
new Mime(".jnlp", "application/x-java-jnlp-file", false), | |
new Mime(".jpb", "application/octet-stream", false), | |
new Mime(".jpe", "image/jpeg", true), | |
new Mime(".jpeg", "image/jpeg", true), | |
new Mime(".jpg", "image/jpeg", true), | |
new Mime(".js", "application/x-javascript", false), | |
new Mime(".json", "application/json", false), | |
new Mime(".jsx", "text/jscript", false), | |
new Mime(".jsxbin", "text/plain", false), | |
new Mime(".latex", "application/x-latex", false), | |
new Mime(".library-ms", "application/windows-library+xml", false), | |
new Mime(".lit", "application/x-ms-reader", false), | |
new Mime(".loadtest", "application/xml", false), | |
new Mime(".lpk", "application/octet-stream", false), | |
new Mime(".lsf", "video/x-la-asf", true), | |
new Mime(".lst", "text/plain", false), | |
new Mime(".lsx", "video/x-la-asf", true), | |
new Mime(".lzh", "application/octet-stream", false), | |
new Mime(".m13", "application/x-msmediaview", false), | |
new Mime(".m14", "application/x-msmediaview", false), | |
new Mime(".m1v", "video/mpeg", true), | |
new Mime(".m2t", "video/vnd.dlna.mpeg-tts", true), | |
new Mime(".m2ts", "video/vnd.dlna.mpeg-tts", true), | |
new Mime(".m2v", "video/mpeg", true), | |
new Mime(".m3u", "audio/x-mpegurl", true), | |
new Mime(".m3u8", "audio/x-mpegurl", true), | |
new Mime(".m4a", "audio/m4a", true), | |
new Mime(".m4b", "audio/m4b", true), | |
new Mime(".m4p", "audio/m4p", true), | |
new Mime(".m4r", "audio/x-m4r", true), | |
new Mime(".m4v", "video/x-m4v", true), | |
new Mime(".mac", "image/x-macpaint", false), | |
new Mime(".mak", "text/plain", false), | |
new Mime(".man", "application/x-troff-man", false), | |
new Mime(".manifest", "application/x-ms-manifest", false), | |
new Mime(".map", "text/plain", false), | |
new Mime(".master", "application/xml", false), | |
new Mime(".mda", "application/msaccess", false), | |
new Mime(".mdb", "application/x-msaccess", false), | |
new Mime(".mde", "application/msaccess", false), | |
new Mime(".mdp", "application/octet-stream", false), | |
new Mime(".me", "application/x-troff-me", false), | |
new Mime(".mfp", "application/x-shockwave-flash", false), | |
new Mime(".mht", "message/rfc822", false), | |
new Mime(".mhtml", "message/rfc822", false), | |
new Mime(".mid", "audio/mid", true), | |
new Mime(".midi", "audio/mid", true), | |
new Mime(".mix", "application/octet-stream", false), | |
new Mime(".mk", "text/plain", false), | |
new Mime(".mmf", "application/x-smaf", false), | |
new Mime(".mno", "text/xml", false), | |
new Mime(".mny", "application/x-msmoney", false), | |
new Mime(".mod", "video/mpeg", true), | |
new Mime(".mov", "video/quicktime", true), | |
new Mime(".movie", "video/x-sgi-movie", true), | |
new Mime(".mp2", "video/mpeg", true), | |
new Mime(".mp2v", "video/mpeg", true), | |
new Mime(".mp3", "audio/mpeg", true), | |
new Mime(".mp4", "video/mp4", true), | |
new Mime(".mp4v", "video/mp4", true), | |
new Mime(".mpa", "video/mpeg", true), | |
new Mime(".mpe", "video/mpeg", true), | |
new Mime(".mpeg", "video/mpeg", true), | |
new Mime(".mpf", "application/vnd.ms-mediapackage", false), | |
new Mime(".mpg", "video/mpeg", true), | |
new Mime(".mpp", "application/vnd.ms-project", false), | |
new Mime(".mpv2", "video/mpeg", true), | |
new Mime(".mqv", "video/quicktime", true), | |
new Mime(".ms", "application/x-troff-ms", false), | |
new Mime(".msi", "application/octet-stream", false), | |
new Mime(".mso", "application/octet-stream", false), | |
new Mime(".mts", "video/vnd.dlna.mpeg-tts", true), | |
new Mime(".mtx", "application/xml", false), | |
new Mime(".mvb", "application/x-msmediaview", false), | |
new Mime(".mvc", "application/x-miva-compiled", false), | |
new Mime(".mxp", "application/x-mmxp", false), | |
new Mime(".nc", "application/x-netcdf", false), | |
new Mime(".nsc", "video/x-ms-asf", true), | |
new Mime(".nws", "message/rfc822", false), | |
new Mime(".ocx", "application/octet-stream", false), | |
new Mime(".oda", "application/oda", false), | |
new Mime(".odc", "text/x-ms-odc", false), | |
new Mime(".odh", "text/plain", false), | |
new Mime(".odl", "text/plain", false), | |
new Mime(".odp", "application/vnd.oasis.opendocument.presentation", false), | |
new Mime(".ods", "application/oleobject", false), | |
new Mime(".odt", "application/vnd.oasis.opendocument.text", false), | |
new Mime(".one", "application/onenote", false), | |
new Mime(".onea", "application/onenote", false), | |
new Mime(".onepkg", "application/onenote", false), | |
new Mime(".onetmp", "application/onenote", false), | |
new Mime(".onetoc", "application/onenote", false), | |
new Mime(".onetoc2", "application/onenote", false), | |
new Mime(".orderedtest", "application/xml", false), | |
new Mime(".osdx", "application/opensearchdescription+xml", false), | |
new Mime(".p10", "application/pkcs10", false), | |
new Mime(".p12", "application/x-pkcs12", false), | |
new Mime(".p7b", "application/x-pkcs7-certificates", false), | |
new Mime(".p7c", "application/pkcs7-mime", false), | |
new Mime(".p7m", "application/pkcs7-mime", false), | |
new Mime(".p7r", "application/x-pkcs7-certreqresp", false), | |
new Mime(".p7s", "application/pkcs7-signature", false), | |
new Mime(".pbm", "image/x-portable-bitmap", false), | |
new Mime(".pcast", "application/x-podcast", false), | |
new Mime(".pct", "image/pict", false), | |
new Mime(".pcx", "application/octet-stream", false), | |
new Mime(".pcz", "application/octet-stream", false), | |
new Mime(".pdf", "application/pdf", false), | |
new Mime(".pfb", "application/octet-stream", false), | |
new Mime(".pfm", "application/octet-stream", false), | |
new Mime(".pfx", "application/x-pkcs12", false), | |
new Mime(".pgm", "image/x-portable-graymap", false), | |
new Mime(".pic", "image/pict", false), | |
new Mime(".pict", "image/pict", false), | |
new Mime(".pkgdef", "text/plain", false), | |
new Mime(".pkgundef", "text/plain", false), | |
new Mime(".pko", "application/vnd.ms-pki.pko", false), | |
new Mime(".pls", "audio/scpls", true), | |
new Mime(".pma", "application/x-perfmon", false), | |
new Mime(".pmc", "application/x-perfmon", false), | |
new Mime(".pml", "application/x-perfmon", false), | |
new Mime(".pmr", "application/x-perfmon", false), | |
new Mime(".pmw", "application/x-perfmon", false), | |
new Mime(".png", "image/png", true), | |
new Mime(".pnm", "image/x-portable-anymap", true), | |
new Mime(".pnt", "image/x-macpaint", true), | |
new Mime(".pntg", "image/x-macpaint", true), | |
new Mime(".pnz", "image/png", true), | |
new Mime(".pot", "application/vnd.ms-powerpoint", false), | |
new Mime(".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12", false), | |
new Mime(".potx", "application/vnd.openxmlformats-officedocument.presentationml.template", false), | |
new Mime(".ppa", "application/vnd.ms-powerpoint", false), | |
new Mime(".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12", false), | |
new Mime(".ppm", "image/x-portable-pixmap", true), | |
new Mime(".pps", "application/vnd.ms-powerpoint", false), | |
new Mime(".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", false), | |
new Mime(".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow", false), | |
new Mime(".ppt", "application/vnd.ms-powerpoint", false), | |
new Mime(".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12", false), | |
new Mime(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation", false), | |
new Mime(".prf", "application/pics-rules", false), | |
new Mime(".prm", "application/octet-stream", false), | |
new Mime(".prx", "application/octet-stream", false), | |
new Mime(".ps", "application/postscript", false), | |
new Mime(".psc1", "application/PowerShell", false), | |
new Mime(".psd", "application/octet-stream", false), | |
new Mime(".psess", "application/xml", false), | |
new Mime(".psm", "application/octet-stream", false), | |
new Mime(".psp", "application/octet-stream", false), | |
new Mime(".pub", "application/x-mspublisher", false), | |
new Mime(".pwz", "application/vnd.ms-powerpoint", false), | |
new Mime(".qht", "text/x-html-insertion", false), | |
new Mime(".qhtm", "text/x-html-insertion", false), | |
new Mime(".qt", "video/quicktime", true), | |
new Mime(".qti", "image/x-quicktime", true), | |
new Mime(".qtif", "image/x-quicktime", true), | |
new Mime(".qtl", "application/x-quicktimeplayer", false), | |
new Mime(".qxd", "application/octet-stream", false), | |
new Mime(".ra", "audio/x-pn-realaudio", true), | |
new Mime(".ram", "audio/x-pn-realaudio", true), | |
new Mime(".rar", "application/octet-stream", false), | |
new Mime(".ras", "image/x-cmu-raster", true), | |
new Mime(".rat", "application/rat-file", false), | |
new Mime(".rc", "text/plain", false), | |
new Mime(".rc2", "text/plain", false), | |
new Mime(".rct", "text/plain", false), | |
new Mime(".rdlc", "application/xml", false), | |
new Mime(".resx", "application/xml", false), | |
new Mime(".rf", "image/vnd.rn-realflash", true), | |
new Mime(".rgb", "image/x-rgb", true), | |
new Mime(".rgs", "text/plain", false), | |
new Mime(".rm", "application/vnd.rn-realmedia", false), | |
new Mime(".rmi", "audio/mid", true), | |
new Mime(".rmp", "application/vnd.rn-rn_music_package", false), | |
new Mime(".roff", "application/x-troff", false), | |
new Mime(".rpm", "audio/x-pn-realaudio-plugin", true), | |
new Mime(".rqy", "text/x-ms-rqy", false), | |
new Mime(".rtf", "application/rtf", false), | |
new Mime(".rtx", "text/richtext", false), | |
new Mime(".ruleset", "application/xml", false), | |
new Mime(".s", "text/plain", false), | |
new Mime(".safariextz", "application/x-safari-safariextz", false), | |
new Mime(".scd", "application/x-msschedule", false), | |
new Mime(".sct", "text/scriptlet", false), | |
new Mime(".sd2", "audio/x-sd2", true), | |
new Mime(".sdp", "application/sdp", false), | |
new Mime(".sea", "application/octet-stream", false), | |
new Mime(".searchConnector-ms", "application/windows-search-connector+xml", false), | |
new Mime(".setpay", "application/set-payment-initiation", false), | |
new Mime(".setreg", "application/set-registration-initiation", false), | |
new Mime(".settings", "application/xml", false), | |
new Mime(".sgimb", "application/x-sgimb", false), | |
new Mime(".sgml", "text/sgml", false), | |
new Mime(".sh", "application/x-sh", false), | |
new Mime(".shar", "application/x-shar", false), | |
new Mime(".shtml", "text/html", false), | |
new Mime(".sit", "application/x-stuffit", false), | |
new Mime(".sitemap", "application/xml", false), | |
new Mime(".skin", "application/xml", false), | |
new Mime(".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12", false), | |
new Mime(".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide", false), | |
new Mime(".slk", "application/vnd.ms-excel", false), | |
new Mime(".sln", "text/plain", false), | |
new Mime(".slupkg-ms", "application/x-ms-license", false), | |
new Mime(".smd", "audio/x-smd", true), | |
new Mime(".smi", "application/octet-stream", false), | |
new Mime(".smx", "audio/x-smd", true), | |
new Mime(".smz", "audio/x-smd", true), | |
new Mime(".snd", "audio/basic", true), | |
new Mime(".snippet", "application/xml", false), | |
new Mime(".snp", "application/octet-stream", false), | |
new Mime(".sol", "text/plain", false), | |
new Mime(".sor", "text/plain", false), | |
new Mime(".spc", "application/x-pkcs7-certificates", false), | |
new Mime(".spl", "application/futuresplash", false), | |
new Mime(".src", "application/x-wais-source", false), | |
new Mime(".srf", "text/plain", false), | |
new Mime(".SSISDeploymentManifest", "text/xml", false), | |
new Mime(".ssm", "application/streamingmedia", false), | |
new Mime(".sst", "application/vnd.ms-pki.certstore", false), | |
new Mime(".stl", "application/vnd.ms-pki.stl", false), | |
new Mime(".sv4cpio", "application/x-sv4cpio", false), | |
new Mime(".sv4crc", "application/x-sv4crc", false), | |
new Mime(".svc", "application/xml", false), | |
new Mime(".swf", "application/x-shockwave-flash", false), | |
new Mime(".t", "application/x-troff", false), | |
new Mime(".tar", "application/x-tar", false), | |
new Mime(".tcl", "application/x-tcl", false), | |
new Mime(".testrunconfig", "application/xml", false), | |
new Mime(".testsettings", "application/xml", false), | |
new Mime(".tex", "application/x-tex", false), | |
new Mime(".texi", "application/x-texinfo", false), | |
new Mime(".texinfo", "application/x-texinfo", false), | |
new Mime(".tgz", "application/x-compressed", true), | |
new Mime(".thmx", "application/vnd.ms-officetheme", false), | |
new Mime(".thn", "application/octet-stream", false), | |
new Mime(".tif", "image/tiff", true), | |
new Mime(".tiff", "image/tiff", true), | |
new Mime(".tlh", "text/plain", false), | |
new Mime(".tli", "text/plain", false), | |
new Mime(".toc", "application/octet-stream", false), | |
new Mime(".tr", "application/x-troff", false), | |
new Mime(".trm", "application/x-msterminal", false), | |
new Mime(".trx", "application/xml", false), | |
new Mime(".ts", "video/vnd.dlna.mpeg-tts", true), | |
new Mime(".tsv", "text/tab-separated-values", false), | |
new Mime(".ttf", "application/octet-stream", false), | |
new Mime(".tts", "video/vnd.dlna.mpeg-tts", true), | |
new Mime(".txt", "text/plain", false), | |
new Mime(".u32", "application/octet-stream", false), | |
new Mime(".uls", "text/iuls", false), | |
new Mime(".user", "text/plain", false), | |
new Mime(".ustar", "application/x-ustar", false), | |
new Mime(".vb", "text/plain", false), | |
new Mime(".vbdproj", "text/plain", false), | |
new Mime(".vbk", "video/mpeg", true), | |
new Mime(".vbproj", "text/plain", false), | |
new Mime(".vbs", "text/vbscript", false), | |
new Mime(".vcf", "text/x-vcard", false), | |
new Mime(".vcproj", "Application/xml", false), | |
new Mime(".vcs", "text/plain", false), | |
new Mime(".vcxproj", "Application/xml", false), | |
new Mime(".vddproj", "text/plain", false), | |
new Mime(".vdp", "text/plain", false), | |
new Mime(".vdproj", "text/plain", false), | |
new Mime(".vdx", "application/vnd.ms-visio.viewer", false), | |
new Mime(".vml", "text/xml", false), | |
new Mime(".vscontent", "application/xml", false), | |
new Mime(".vsct", "text/xml", false), | |
new Mime(".vsd", "application/vnd.visio", false), | |
new Mime(".vsi", "application/ms-vsi", false), | |
new Mime(".vsix", "application/vsix", false), | |
new Mime(".vsixlangpack", "text/xml", false), | |
new Mime(".vsixmanifest", "text/xml", false), | |
new Mime(".vsmdi", "application/xml", false), | |
new Mime(".vspscc", "text/plain", false), | |
new Mime(".vss", "application/vnd.visio", false), | |
new Mime(".vsscc", "text/plain", false), | |
new Mime(".vssettings", "text/xml", false), | |
new Mime(".vssscc", "text/plain", false), | |
new Mime(".vst", "application/vnd.visio", false), | |
new Mime(".vstemplate", "text/xml", false), | |
new Mime(".vsto", "application/x-ms-vsto", false), | |
new Mime(".vsw", "application/vnd.visio", false), | |
new Mime(".vsx", "application/vnd.visio", false), | |
new Mime(".vtx", "application/vnd.visio", false), | |
new Mime(".wav", "audio/wav", true), | |
new Mime(".wave", "audio/wav", true), | |
new Mime(".wax", "audio/x-ms-wax", true), | |
new Mime(".wbk", "application/msword", false), | |
new Mime(".wbmp", "image/vnd.wap.wbmp", true), | |
new Mime(".wcm", "application/vnd.ms-works", false), | |
new Mime(".wdb", "application/vnd.ms-works", false), | |
new Mime(".wdp", "image/vnd.ms-photo", true), | |
new Mime(".webarchive", "application/x-safari-webarchive", false), | |
new Mime(".webtest", "application/xml", false), | |
new Mime(".wiq", "application/xml", false), | |
new Mime(".wiz", "application/msword", false), | |
new Mime(".wks", "application/vnd.ms-works", false), | |
new Mime(".WLMP", "application/wlmoviemaker", false), | |
new Mime(".wlpginstall", "application/x-wlpg-detect", false), | |
new Mime(".wlpginstall3", "application/x-wlpg3-detect", false), | |
new Mime(".wm", "video/x-ms-wm", true), | |
new Mime(".wma", "audio/x-ms-wma", true), | |
new Mime(".wmd", "application/x-ms-wmd", false), | |
new Mime(".wmf", "application/x-msmetafile", false), | |
new Mime(".wml", "text/vnd.wap.wml", false), | |
new Mime(".wmlc", "application/vnd.wap.wmlc", false), | |
new Mime(".wmls", "text/vnd.wap.wmlscript", false), | |
new Mime(".wmlsc", "application/vnd.wap.wmlscriptc", false), | |
new Mime(".wmp", "video/x-ms-wmp", true), | |
new Mime(".wmv", "video/x-ms-wmv", true), | |
new Mime(".wmx", "video/x-ms-wmx", true), | |
new Mime(".wmz", "application/x-ms-wmz", false), | |
new Mime(".wpl", "application/vnd.ms-wpl", false), | |
new Mime(".wps", "application/vnd.ms-works", false), | |
new Mime(".wri", "application/x-mswrite", false), | |
new Mime(".wrl", "x-world/x-vrml", false), | |
new Mime(".wrz", "x-world/x-vrml", false), | |
new Mime(".wsc", "text/scriptlet", false), | |
new Mime(".wsdl", "text/xml", false), | |
new Mime(".wvx", "video/x-ms-wvx", true), | |
new Mime(".x", "application/directx", false), | |
new Mime(".xaf", "x-world/x-vrml", false), | |
new Mime(".xaml", "application/xaml+xml", false), | |
new Mime(".xap", "application/x-silverlight-app", false), | |
new Mime(".xbap", "application/x-ms-xbap", false), | |
new Mime(".xbm", "image/x-xbitmap", true), | |
new Mime(".xdr", "text/plain", false), | |
new Mime(".xht", "application/xhtml+xml", false), | |
new Mime(".xhtml", "application/xhtml+xml", false), | |
new Mime(".xla", "application/vnd.ms-excel", false), | |
new Mime(".xlam", "application/vnd.ms-excel.addin.macroEnabled.12", false), | |
new Mime(".xlc", "application/vnd.ms-excel", false), | |
new Mime(".xld", "application/vnd.ms-excel", false), | |
new Mime(".xlk", "application/vnd.ms-excel", false), | |
new Mime(".xll", "application/vnd.ms-excel", false), | |
new Mime(".xlm", "application/vnd.ms-excel", false), | |
new Mime(".xls", "application/vnd.ms-excel", false), | |
new Mime(".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12", false), | |
new Mime(".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12", false), | |
new Mime(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", false), | |
new Mime(".xlt", "application/vnd.ms-excel", false), | |
new Mime(".xltm", "application/vnd.ms-excel.template.macroEnabled.12", false), | |
new Mime(".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template", false), | |
new Mime(".xlw", "application/vnd.ms-excel", false), | |
new Mime(".xml", "text/xml", false), | |
new Mime(".xmta", "application/xml", false), | |
new Mime(".xof", "x-world/x-vrml", false), | |
new Mime(".XOML", "text/plain", false), | |
new Mime(".xpm", "image/x-xpixmap", false), | |
new Mime(".xps", "application/vnd.ms-xpsdocument", false), | |
new Mime(".xrm-ms", "text/xml", false), | |
new Mime(".xsc", "application/xml", false), | |
new Mime(".xsd", "text/xml", false), | |
new Mime(".xsf", "text/xml", false), | |
new Mime(".xsl", "text/xml", false), | |
new Mime(".xslt", "text/xml", false), | |
new Mime(".xsn", "application/octet-stream", false), | |
new Mime(".xss", "application/xml", false), | |
new Mime(".xtp", "application/octet-stream", false), | |
new Mime(".xwd", "image/x-xwindowdump", true), | |
new Mime(".z", "application/x-compress", true), | |
new Mime(".zip", "application/x-zip-compressed", true) | |
}; | |
public static Mime GetMime(string extension) | |
{ | |
if (extension == null) | |
{ | |
throw new ArgumentNullException(nameof(extension)); | |
} | |
if (!extension.StartsWith(".", StringComparison.InvariantCultureIgnoreCase)) | |
{ | |
extension = "." + extension; | |
} | |
return Mimes.First((x) => x.Extension == extension); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment