Skip to content

Instantly share code, notes, and snippets.

@jkereako
Created October 18, 2018 17:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkereako/88641b5a432c3c6c9ac4bdb76ed81085 to your computer and use it in GitHub Desktop.
Save jkereako/88641b5a432c3c6c9ac4bdb76ed81085 to your computer and use it in GitHub Desktop.
Xamarin.Forms: Downloads binary files and writes them to disk.
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);
}
}
}
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;
}
}
}
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