2

I am using following code to list a file from a folder and display for download

public FileResult Download(string id)
    {
        int fid = Convert.ToInt32(id);
        var files = new DataClasses().GetFiles();
        string filename = (from f in files
                           where f.FileId == fid
                           select f.FilePath).First();
        string contentType = "application/doc";
        //Parameters to file are
        //1. The File Path on the File Server
        //2. The content type MIME type
        //3. The parameter for the file save by the browser
        return File(filename, contentType, "Report.doc");
    }

enter image description here here everything is working fine for word documents but if I place any other type of file like excel or pdf it showing error I know this error is due to contentType = "application/doc"; I want to ask how to make the content type dynamic so that any kind of file inside the folder can be easily downloaded.

I know I can do it something like

string contentType = string.Empty;    
        if (CurrentFileName.Contains(".pdf"))  
        {  
            contentType = "application/pdf";  
        }    
        else if (CurrentFileName.Contains(".docx"))  
        {  
            contentType = "application/docx";  
        }  

But here I need to write condition for every file type. Is there any way to ignore these condition checks?

Namit Kumar
  • 111
  • 1
  • 5
  • 11
  • It's not really clear what you're asking. Just put the right mime type in there instead of the hard-coded `application/doc`. Are you really asking how to *detect* the mime type from the data? – Jon Skeet Mar 25 '15 at 06:49
  • i have update my question check it now. – Namit Kumar Mar 25 '15 at 06:52
  • 1
    Well you can use a `Dictionary` to store the mime type associated with a file extension - but that can still be wrong... – Jon Skeet Mar 25 '15 at 07:02
  • actually i use string contentType = "application/." + Path.GetExtension(filename); Is it a correct way ? – Namit Kumar Mar 25 '15 at 07:10
  • 3
    No, because: a) that's just not always the right mime type (think images, for example); b) ideally you should detect the mime type based on the *data* rather than the filename - that's harder (I'm sure there are libraries to do it) but more reliable. It depends somewhat on your context though. It would probably be best to detect the mime type when the data is *added* to the database, and keep it there - then you don't need to do the detection every time you download it. – Jon Skeet Mar 25 '15 at 07:12
  • Why is it not downloading the file ? – Sribin May 31 '22 at 18:52

4 Answers4

4

if you're not using .Net framework 4.5 then I suggest using a dictionary to find an apropriate mime Type for each possible extensions.

public FileResult Download(string id)
{
    int fid = Convert.ToInt32(id);
    var files = new DataClasses().GetFiles();
    string filename = (from f in files
                       where f.FileId == fid
                       select f.FilePath).First();

  String filePath = fileName;
  fileName = Path.GetFileName(filePath);
  String contentType = GetFromFileName(fileName);
  return File(filePath, contentType, fileName);
}

public String GetFromFileName(String fileName)
{
   return GetFromExtension(Path.GetExtension(fileName).Remove(0, 1));
}

public String GetFromExtension(String ext)
{
   if (MIMETypesDictionary.ContainsKey(ext))
   {
     return MIMETypesDictionary[extension];
   }
   return "unknown/unknown";
}

private static IDictionary<string, string> MIMETypesDictionary = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase) {
            {"323", "text/h323"},
            {"3g2", "video/3gpp2"},
            {"3gp", "video/3gpp"},
            {"3gp2", "video/3gpp2"},
            {"3gpp", "video/3gpp"},
            {"7z", "application/x-7z-compressed"},
            {"aa", "audio/audible"},
            {"AAC", "audio/aac"},
            {"aaf", "application/octet-stream"},
            {"aax", "audio/vnd.audible.aax"},
            {"ac3", "audio/ac3"},
            {"aca", "application/octet-stream"},
            {"accda", "application/msaccess.addin"},
            {"accdb", "application/msaccess"},
            {"accdc", "application/msaccess.cab"},
            {"accde", "application/msaccess"},
            {"accdr", "application/msaccess.runtime"},
            {"accdt", "application/msaccess"},
            {"accdw", "application/msaccess.webapplication"},
            {"accft", "application/msaccess.ftemplate"},
            {"acx", "application/internet-property-stream"},
            {"AddIn", "text/xml"},
            {"ade", "application/msaccess"},
            {"adobebridge", "application/x-bridge-url"},
            {"adp", "application/msaccess"},
            {"ADT", "audio/vnd.dlna.adts"},
            {"ADTS", "audio/aac"},
            {"afm", "application/octet-stream"},
            {"ai", "application/postscript"},
            {"aif", "audio/x-aiff"},
            {"aifc", "audio/aiff"},
            {"aiff", "audio/aiff"},
            {"air", "application/vnd.adobe.air-application-installer-package+zip"},
            {"amc", "application/x-mpeg"},
            {"application", "application/x-ms-application"},
            {"art", "image/x-jg"},
            {"asa", "application/xml"},
            {"asax", "application/xml"},
            {"ascx", "application/xml"},
            {"asd", "application/octet-stream"},
            {"asf", "video/x-ms-asf"},
            {"ashx", "application/xml"},
            {"asi", "application/octet-stream"},
            {"asm", "text/plain"},
            {"asmx", "application/xml"},
            {"aspx", "application/xml"},
            {"asr", "video/x-ms-asf"},
            {"asx", "video/x-ms-asf"},
            {"atom", "application/atom+xml"},
            {"au", "audio/basic"},
            {"avi", "video/x-msvideo"},
            {"axs", "application/olescript"},
            {"bas", "text/plain"},
            {"bcpio", "application/x-bcpio"},
            {"bin", "application/octet-stream"},
            {"bmp", "image/bmp"},
            {"c", "text/plain"},
            {"cab", "application/octet-stream"},
            {"caf", "audio/x-caf"},
            {"calx", "application/vnd.ms-office.calx"},
            {"cat", "application/vnd.ms-pki.seccat"},
            {"cc", "text/plain"},
            {"cd", "text/plain"},
            {"cdda", "audio/aiff"},
            {"cdf", "application/x-cdf"},
            {"cer", "application/x-x509-ca-cert"},
            {"chm", "application/octet-stream"},
            {"class", "application/x-java-applet"},
            {"clp", "application/x-msclip"},
            {"cmx", "image/x-cmx"},
            {"cnf", "text/plain"},
            {"cod", "image/cis-cod"},
            {"config", "application/xml"},
            {"contact", "text/x-ms-contact"},
            {"coverage", "application/xml"},
            {"cpio", "application/x-cpio"},
            {"cpp", "text/plain"},
            {"crd", "application/x-mscardfile"},
            {"crl", "application/pkix-crl"},
            {"crt", "application/x-x509-ca-cert"},
            {"cs", "text/plain"},
            {"csdproj", "text/plain"},
            {"csh", "application/x-csh"},
            {"csproj", "text/plain"},
            {"css", "text/css"},
            {"csv", "text/csv"},
            {"cur", "application/octet-stream"},
            {"cxx", "text/plain"},
            {"dat", "application/octet-stream"},
            {"datasource", "application/xml"},
            {"dbproj", "text/plain"},
            {"dcr", "application/x-director"},
            {"def", "text/plain"},
            {"deploy", "application/octet-stream"},
            {"der", "application/x-x509-ca-cert"},
            {"dgml", "application/xml"},
            {"dib", "image/bmp"},
            {"dif", "video/x-dv"},
            {"dir", "application/x-director"},
            {"disco", "text/xml"},
            {"dll", "application/x-msdownload"},
            {"dll.config", "text/xml"},
            {"dlm", "text/dlm"},
            {"doc", "application/msword"},
            {"docm", "application/vnd.ms-word.document.macroEnabled.12"},
            {"docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
            {"dot", "application/msword"},
            {"dotm", "application/vnd.ms-word.template.macroEnabled.12"},
            {"dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
            {"dsp", "application/octet-stream"},
            {"dsw", "text/plain"},
            {"dtd", "text/xml"},
            {"dtsConfig", "text/xml"},
            {"dv", "video/x-dv"},
            {"dvi", "application/x-dvi"},
            {"dwf", "drawing/x-dwf"},
            {"dwp", "application/octet-stream"},
            {"dxr", "application/x-director"},
            {"eml", "message/rfc822"},
            {"emz", "application/octet-stream"},
            {"eot", "application/octet-stream"},
            {"eps", "application/postscript"},
            {"etl", "application/etl"},
            {"etx", "text/x-setext"},
            {"evy", "application/envoy"},
            {"exe", "application/octet-stream"},
            {"exe.config", "text/xml"},
            {"fdf", "application/vnd.fdf"},
            {"fif", "application/fractals"},
            {"filters", "Application/xml"},
            {"fla", "application/octet-stream"},
            {"flr", "x-world/x-vrml"},
            {"flv", "video/x-flv"},
            {"fsscript", "application/fsharp-script"},
            {"fsx", "application/fsharp-script"},
            {"generictest", "application/xml"},
            {"gif", "image/gif"},
            {"group", "text/x-ms-group"},
            {"gsm", "audio/x-gsm"},
            {"gtar", "application/x-gtar"},
            {"gz", "application/x-gzip"},
            {"h", "text/plain"},
            {"hdf", "application/x-hdf"},
            {"hdml", "text/x-hdml"},
            {"hhc", "application/x-oleobject"},
            {"hhk", "application/octet-stream"},
            {"hhp", "application/octet-stream"},
            {"hlp", "application/winhlp"},
            {"hpp", "text/plain"},
            {"hqx", "application/mac-binhex40"},
            {"hta", "application/hta"},
            {"htc", "text/x-component"},
            {"htm", "text/html"},
            {"html", "text/html"},
            {"htt", "text/webviewhtml"},
            {"hxa", "application/xml"},
            {"hxc", "application/xml"},
            {"hxd", "application/octet-stream"},
            {"hxe", "application/xml"},
            {"hxf", "application/xml"},
            {"hxh", "application/octet-stream"},
            {"hxi", "application/octet-stream"},
            {"hxk", "application/xml"},
            {"hxq", "application/octet-stream"},
            {"hxr", "application/octet-stream"},
            {"hxs", "application/octet-stream"},
            {"hxt", "text/html"},
            {"hxv", "application/xml"},
            {"hxw", "application/octet-stream"},
            {"hxx", "text/plain"},
            {"i", "text/plain"},
            {"ico", "image/x-icon"},
            {"ics", "application/octet-stream"},
            {"idl", "text/plain"},
            {"ief", "image/ief"},
            {"iii", "application/x-iphone"},
            {"inc", "text/plain"},
            {"inf", "application/octet-stream"},
            {"inl", "text/plain"},
            {"ins", "application/x-internet-signup"},
            {"ipa", "application/x-itunes-ipa"},
            {"ipg", "application/x-itunes-ipg"},
            {"ipproj", "text/plain"},
            {"ipsw", "application/x-itunes-ipsw"},
            {"iqy", "text/x-ms-iqy"},
            {"isp", "application/x-internet-signup"},
            {"ite", "application/x-itunes-ite"},
            {"itlp", "application/x-itunes-itlp"},
            {"itms", "application/x-itunes-itms"},
            {"itpc", "application/x-itunes-itpc"},
            {"IVF", "video/x-ivf"},
            {"jar", "application/java-archive"},
            {"java", "application/octet-stream"},
            {"jck", "application/liquidmotion"},
            {"jcz", "application/liquidmotion"},
            {"jfif", "image/pjpeg"},
            {"jnlp", "application/x-java-jnlp-file"},
            {"jpb", "application/octet-stream"},
            {"jpe", "image/jpeg"},
            {"jpeg", "image/jpeg"},
            {"jpg", "image/jpeg"},
            {"js", "application/x-javascript"},
            {"json", "application/json"},
            {"jsx", "text/jscript"},
            {"jsxbin", "text/plain"},
            {"latex", "application/x-latex"},
            {"library-ms", "application/windows-library+xml"},
            {"lit", "application/x-ms-reader"},
            {"loadtest", "application/xml"},
            {"lpk", "application/octet-stream"},
            {"lsf", "video/x-la-asf"},
            {"lst", "text/plain"},
            {"lsx", "video/x-la-asf"},
            {"lzh", "application/octet-stream"},
            {"m13", "application/x-msmediaview"},
            {"m14", "application/x-msmediaview"},
            {"m1v", "video/mpeg"},
            {"m2t", "video/vnd.dlna.mpeg-tts"},
            {"m2ts", "video/vnd.dlna.mpeg-tts"},
            {"m2v", "video/mpeg"},
            {"m3u", "audio/x-mpegurl"},
            {"m3u8", "audio/x-mpegurl"},
            {"m4a", "audio/m4a"},
            {"m4b", "audio/m4b"},
            {"m4p", "audio/m4p"},
            {"m4r", "audio/x-m4r"},
            {"m4v", "video/x-m4v"},
            {"mac", "image/x-macpaint"},
            {"mak", "text/plain"},
            {"man", "application/x-troff-man"},
            {"manifest", "application/x-ms-manifest"},
            {"map", "text/plain"},
            {"master", "application/xml"},
            {"mda", "application/msaccess"},
            {"mdb", "application/x-msaccess"},
            {"mde", "application/msaccess"},
            {"mdp", "application/octet-stream"},
            {"me", "application/x-troff-me"},
            {"mfp", "application/x-shockwave-flash"},
            {"mht", "message/rfc822"},
            {"mhtml", "message/rfc822"},
            {"mid", "audio/mid"},
            {"midi", "audio/mid"},
            {"mix", "application/octet-stream"},
            {"mk", "text/plain"},
            {"mmf", "application/x-smaf"},
            {"mno", "text/xml"},
            {"mny", "application/x-msmoney"},
            {"mod", "video/mpeg"},
            {"mov", "video/quicktime"},
            {"movie", "video/x-sgi-movie"},
            {"mp2", "video/mpeg"},
            {"mp2v", "video/mpeg"},
            {"mp3", "audio/mpeg"},
            {"mp4", "video/mp4"},
            {"mp4v", "video/mp4"},
            {"mpa", "video/mpeg"},
            {"mpe", "video/mpeg"},
            {"mpeg", "video/mpeg"},
            {"mpf", "application/vnd.ms-mediapackage"},
            {"mpg", "video/mpeg"},
            {"mpp", "application/vnd.ms-project"},
            {"mpv2", "video/mpeg"},
            {"mqv", "video/quicktime"},
            {"ms", "application/x-troff-ms"},
            {"msi", "application/octet-stream"},
            {"mso", "application/octet-stream"},
            {"mts", "video/vnd.dlna.mpeg-tts"},
            {"mtx", "application/xml"},
            {"mvb", "application/x-msmediaview"},
            {"mvc", "application/x-miva-compiled"},
            {"mxp", "application/x-mmxp"},
            {"nc", "application/x-netcdf"},
            {"nsc", "video/x-ms-asf"},
            {"nws", "message/rfc822"},
            {"ocx", "application/octet-stream"},
            {"oda", "application/oda"},
            {"odc", "text/x-ms-odc"},
            {"odh", "text/plain"},
            {"odl", "text/plain"},
            {"odp", "application/vnd.oasis.opendocument.presentation"},
            {"ods", "application/oleobject"},
            {"odt", "application/vnd.oasis.opendocument.text"},
            {"one", "application/onenote"},
            {"onea", "application/onenote"},
            {"onepkg", "application/onenote"},
            {"onetmp", "application/onenote"},
            {"onetoc", "application/onenote"},
            {"onetoc2", "application/onenote"},
            {"orderedtest", "application/xml"},
            {"osdx", "application/opensearchdescription+xml"},
            {"p10", "application/pkcs10"},
            {"p12", "application/x-pkcs12"},
            {"p7b", "application/x-pkcs7-certificates"},
            {"p7c", "application/pkcs7-mime"},
            {"p7m", "application/pkcs7-mime"},
            {"p7r", "application/x-pkcs7-certreqresp"},
            {"p7s", "application/pkcs7-signature"},
            {"pbm", "image/x-portable-bitmap"},
            {"pcast", "application/x-podcast"},
            {"pct", "image/pict"},
            {"pcx", "application/octet-stream"},
            {"pcz", "application/octet-stream"},
            {"pdf", "application/pdf"},
            {"pfb", "application/octet-stream"},
            {"pfm", "application/octet-stream"},
            {"pfx", "application/x-pkcs12"},
            {"pgm", "image/x-portable-graymap"},
            {"pic", "image/pict"},
            {"pict", "image/pict"},
            {"pkgdef", "text/plain"},
            {"pkgundef", "text/plain"},
            {"pko", "application/vnd.ms-pki.pko"},
            {"pls", "audio/scpls"},
            {"pma", "application/x-perfmon"},
            {"pmc", "application/x-perfmon"},
            {"pml", "application/x-perfmon"},
            {"pmr", "application/x-perfmon"},
            {"pmw", "application/x-perfmon"},
            {"png", "image/png"},
            {"pnm", "image/x-portable-anymap"},
            {"pnt", "image/x-macpaint"},
            {"pntg", "image/x-macpaint"},
            {"pnz", "image/png"},
            {"pot", "application/vnd.ms-powerpoint"},
            {"potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"},
            {"potx", "application/vnd.openxmlformats-officedocument.presentationml.template"},
            {"ppa", "application/vnd.ms-powerpoint"},
            {"ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"},
            {"ppm", "image/x-portable-pixmap"},
            {"pps", "application/vnd.ms-powerpoint"},
            {"ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"},
            {"ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"},
            {"ppt", "application/vnd.ms-powerpoint"},
            {"pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"},
            {"pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
            {"prf", "application/pics-rules"},
            {"prm", "application/octet-stream"},
            {"prx", "application/octet-stream"},
            {"ps", "application/postscript"},
            {"psc1", "application/PowerShell"},
            {"psd", "application/octet-stream"},
            {"psess", "application/xml"},
            {"psm", "application/octet-stream"},
            {"psp", "application/octet-stream"},
            {"pub", "application/x-mspublisher"},
            {"pwz", "application/vnd.ms-powerpoint"},
            {"qht", "text/x-html-insertion"},
            {"qhtm", "text/x-html-insertion"},
            {"qt", "video/quicktime"},
            {"qti", "image/x-quicktime"},
            {"qtif", "image/x-quicktime"},
            {"qtl", "application/x-quicktimeplayer"},
            {"qxd", "application/octet-stream"},
            {"ra", "audio/x-pn-realaudio"},
            {"ram", "audio/x-pn-realaudio"},
            {"rar", "application/octet-stream"},
            {"ras", "image/x-cmu-raster"},
            {"rat", "application/rat-file"},
            {"rc", "text/plain"},
            {"rc2", "text/plain"},
            {"rct", "text/plain"},
            {"rdlc", "application/xml"},
            {"resx", "application/xml"},
            {"rf", "image/vnd.rn-realflash"},
            {"rgb", "image/x-rgb"},
            {"rgs", "text/plain"},
            {"rm", "application/vnd.rn-realmedia"},
            {"rmi", "audio/mid"},
            {"rmp", "application/vnd.rn-rn_music_package"},
            {"roff", "application/x-troff"},
            {"rpm", "audio/x-pn-realaudio-plugin"},
            {"rqy", "text/x-ms-rqy"},
            {"rtf", "application/rtf"},
            {"rtx", "text/richtext"},
            {"ruleset", "application/xml"},
            {"s", "text/plain"},
            {"safariextz", "application/x-safari-safariextz"},
            {"scd", "application/x-msschedule"},
            {"sct", "text/scriptlet"},
            {"sd2", "audio/x-sd2"},
            {"sdp", "application/sdp"},
            {"sea", "application/octet-stream"},
            {"searchConnector-ms", "application/windows-search-connector+xml"},
            {"setpay", "application/set-payment-initiation"},
            {"setreg", "application/set-registration-initiation"},
            {"settings", "application/xml"},
            {"sgimb", "application/x-sgimb"},
            {"sgml", "text/sgml"},
            {"sh", "application/x-sh"},
            {"shar", "application/x-shar"},
            {"shtml", "text/html"},
            {"sit", "application/x-stuffit"},
            {"sitemap", "application/xml"},
            {"skin", "application/xml"},
            {"sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12"},
            {"sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"},
            {"slk", "application/vnd.ms-excel"},
            {"sln", "text/plain"},
            {"slupkg-ms", "application/x-ms-license"},
            {"smd", "audio/x-smd"},
            {"smi", "application/octet-stream"},
            {"smx", "audio/x-smd"},
            {"smz", "audio/x-smd"},
            {"snd", "audio/basic"},
            {"snippet", "application/xml"},
            {"snp", "application/octet-stream"},
            {"sol", "text/plain"},
            {"sor", "text/plain"},
            {"spc", "application/x-pkcs7-certificates"},
            {"spl", "application/futuresplash"},
            {"src", "application/x-wais-source"},
            {"srf", "text/plain"},
            {"SSISDeploymentManifest", "text/xml"},
            {"ssm", "application/streamingmedia"},
            {"sst", "application/vnd.ms-pki.certstore"},
            {"stl", "application/vnd.ms-pki.stl"},
            {"sv4cpio", "application/x-sv4cpio"},
            {"sv4crc", "application/x-sv4crc"},
            {"svc", "application/xml"},
            {"swf", "application/x-shockwave-flash"},
            {"t", "application/x-troff"},
            {"tar", "application/x-tar"},
            {"tcl", "application/x-tcl"},
            {"testrunconfig", "application/xml"},
            {"testsettings", "application/xml"},
            {"tex", "application/x-tex"},
            {"texi", "application/x-texinfo"},
            {"texinfo", "application/x-texinfo"},
            {"tgz", "application/x-compressed"},
            {"thmx", "application/vnd.ms-officetheme"},
            {"thn", "application/octet-stream"},
            {"tif", "image/tiff"},
            {"tiff", "image/tiff"},
            {"tlh", "text/plain"},
            {"tli", "text/plain"},
            {"toc", "application/octet-stream"},
            {"tr", "application/x-troff"},
            {"trm", "application/x-msterminal"},
            {"trx", "application/xml"},
            {"ts", "video/vnd.dlna.mpeg-tts"},
            {"tsv", "text/tab-separated-values"},
            {"ttf", "application/octet-stream"},
            {"tts", "video/vnd.dlna.mpeg-tts"},
            {"txt", "text/plain"},
            {"u32", "application/octet-stream"},
            {"uls", "text/iuls"},
            {"user", "text/plain"},
            {"ustar", "application/x-ustar"},
            {"vb", "text/plain"},
            {"vbdproj", "text/plain"},
            {"vbk", "video/mpeg"},
            {"vbproj", "text/plain"},
            {"vbs", "text/vbscript"},
            {"vcf", "text/x-vcard"},
            {"vcproj", "Application/xml"},
            {"vcs", "text/plain"},
            {"vcxproj", "Application/xml"},
            {"vddproj", "text/plain"},
            {"vdp", "text/plain"},
            {"vdproj", "text/plain"},
            {"vdx", "application/vnd.ms-visio.viewer"},
            {"vml", "text/xml"},
            {"vscontent", "application/xml"},
            {"vsct", "text/xml"},
            {"vsd", "application/vnd.visio"},
            {"vsi", "application/ms-vsi"},
            {"vsix", "application/vsix"},
            {"vsixlangpack", "text/xml"},
            {"vsixmanifest", "text/xml"},
            {"vsmdi", "application/xml"},
            {"vspscc", "text/plain"},
            {"vss", "application/vnd.visio"},
            {"vsscc", "text/plain"},
            {"vssettings", "text/xml"},
            {"vssscc", "text/plain"},
            {"vst", "application/vnd.visio"},
            {"vstemplate", "text/xml"},
            {"vsto", "application/x-ms-vsto"},
            {"vsw", "application/vnd.visio"},
            {"vsx", "application/vnd.visio"},
            {"vtx", "application/vnd.visio"},
            {"wav", "audio/wav"},
            {"wave", "audio/wav"},
            {"wax", "audio/x-ms-wax"},
            {"wbk", "application/msword"},
            {"wbmp", "image/vnd.wap.wbmp"},
            {"wcm", "application/vnd.ms-works"},
            {"wdb", "application/vnd.ms-works"},
            {"wdp", "image/vnd.ms-photo"},
            {"webarchive", "application/x-safari-webarchive"},
            {"webtest", "application/xml"},
            {"wiq", "application/xml"},
            {"wiz", "application/msword"},
            {"wks", "application/vnd.ms-works"},
            {"WLMP", "application/wlmoviemaker"},
            {"wlpginstall", "application/x-wlpg-detect"},
            {"wlpginstall3", "application/x-wlpg3-detect"},
            {"wm", "video/x-ms-wm"},
            {"wma", "audio/x-ms-wma"},
            {"wmd", "application/x-ms-wmd"},
            {"wmf", "application/x-msmetafile"},
            {"wml", "text/vnd.wap.wml"},
            {"wmlc", "application/vnd.wap.wmlc"},
            {"wmls", "text/vnd.wap.wmlscript"},
            {"wmlsc", "application/vnd.wap.wmlscriptc"},
            {"wmp", "video/x-ms-wmp"},
            {"wmv", "video/x-ms-wmv"},
            {"wmx", "video/x-ms-wmx"},
            {"wmz", "application/x-ms-wmz"},
            {"wpl", "application/vnd.ms-wpl"},
            {"wps", "application/vnd.ms-works"},
            {"wri", "application/x-mswrite"},
            {"wrl", "x-world/x-vrml"},
            {"wrz", "x-world/x-vrml"},
            {"wsc", "text/scriptlet"},
            {"wsdl", "text/xml"},
            {"wvx", "video/x-ms-wvx"},
            {"x", "application/directx"},
            {"xaf", "x-world/x-vrml"},
            {"xaml", "application/xaml+xml"},
            {"xap", "application/x-silverlight-app"},
            {"xbap", "application/x-ms-xbap"},
            {"xbm", "image/x-xbitmap"},
            {"xdr", "text/plain"},
            {"xht", "application/xhtml+xml"},
            {"xhtml", "application/xhtml+xml"},
            {"xla", "application/vnd.ms-excel"},
            {"xlam", "application/vnd.ms-excel.addin.macroEnabled.12"},
            {"xlc", "application/vnd.ms-excel"},
            {"xld", "application/vnd.ms-excel"},
            {"xlk", "application/vnd.ms-excel"},
            {"xll", "application/vnd.ms-excel"},
            {"xlm", "application/vnd.ms-excel"},
            {"xls", "application/vnd.ms-excel"},
            {"xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
            {"xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"},
            {"xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
            {"xlt", "application/vnd.ms-excel"},
            {"xltm", "application/vnd.ms-excel.template.macroEnabled.12"},
            {"xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
            {"xlw", "application/vnd.ms-excel"},
            {"xml", "text/xml"},
            {"xmta", "application/xml"},
            {"xof", "x-world/x-vrml"},
            {"XOML", "text/plain"},
            {"xpm", "image/x-xpixmap"},
            {"xps", "application/vnd.ms-xpsdocument"},
            {"xrm-ms", "text/xml"},
            {"xsc", "application/xml"},
            {"xsd", "text/xml"},
            {"xsf", "text/xml"},
            {"xsl", "text/xml"},
            {"xslt", "text/xml"},
            {"xsn", "application/octet-stream"},
            {"xss", "application/xml"},
            {"xtp", "application/octet-stream"},
            {"xwd", "image/x-xwindowdump"},
            {"z", "application/x-compress"},
            {"zip", "application/x-zip-compressed"}
}
Faruk
  • 5,438
  • 3
  • 30
  • 46
4

You can use the MimeMapping class:

using System.Web;

(...)
return File(filename, MimeMapping.GetMimeMapping(filename), ...);
romanoza
  • 4,775
  • 3
  • 27
  • 44
3

did you try this?

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".syx" mimeType="application/octet-stream" />
         <mimeMap fileExtension=".tab" mimeType="text/plain" />
      </staticContent>
   </system.webServer>
</configuration>

http://www.iis.net/configreference/system.webserver/staticcontent/mimemap

David B.
  • 113
  • 6
1

File extensions can be renamed thus giving false information. There is a library called Tridlib.net that can help detect actual mime type by reading a file. In case anything is unclear, please reply I will try to explain and improve this answer.

Reference : http://mark0.net/code-tridlib-e.html

Note: The library available on this site is 32bit version so you have to test your web application in 32bit mode. However there are two solution for this.

  1. I had the same problem so I instead created a C# console utility (32bit) that uses this library and i am running this utility's EXE within my web app (64bit). Refer Run an exe from C# code
  2. Or you can ask the developer for 'TridLib' for 64bit version which is very expensive. Although 32 bit version is also limited to testing purpose, you might have to check with the developer for commercial license.

Consider this sample code about how to use this library.

Description of sample code :

Prerequisites

  1. Download its DLL from the referenced website, to your project.
  2. You will also get a definition file of TridLib called "TrIDDefs.TRD", keep it inside some directory in your project so that it will be utilized at runtime to detect mime types.

Flow:

  1. Download a sample source package to help you setup your TridLib reusable class from http://mark0.net/download/tridlib-samples.zip
  2. In my example "TridMimeCheckResult" is a result class that I have created to hold different mime types as returned by using this library. This library returns multiple mime types for a single file upon number of iterations. Which is why I store all types as part of list. After that the type that has maximum Point of matching probability is considered the most accurate mime type. Point is basically a number that TridLib assigns to identified types.
  3. I have initilized TridLib by passing the directory path where "TrIDDefs.TRD" is located.
  4. Then I have passed the complete path to its method TrID_SubmitFileA for which I want to know the mime type.
  5. Then we have to run iterations using pre defined logic shared by TridLib on its website and collect all resultant types.
  6. After that I run a final check to determine which mime type has largest Point value and consider that as accurate one.

public class Program
{
    static void Main(string[] args)
    {    
        TridMimeCheckResult finalMimeResult = ValidateMime(filePathToCheck, tridDefinitionPath);  // In place of "tridDefinitionPath", you have to pass the location where "TrIDDefs.TRD" file is located.
    }
    public class TridMimeCheckResult
    {
        public string FiletypeExtension { get; internal set; }
        public string FileTypeName { get; internal set; }
        public int Point { get; set; }
    }

    public static string ValidateMime(string filePath, string tridDefinitionPackPath)
    {
        int Ret;
        int ResNum;
        int ResId;
        string sTrIDRes = "";
        TridMimeCheckResult finalMimeResult = new TridMimeCheckResult();
        List<TridMimeCheckResult> listMimeTypes = new List<TridMimeCheckResult>();
        Ret = TrIDLib.TrID_LoadDefsPack(tridDefinitionPackPath);

        // submit the file
        Ret = TrIDLib.TrID_SubmitFileA(filePath);

        // perform the analysis
        Ret = TrIDLib.TrID_Analyze();
        if (Ret > 0)
        {
            // get the number of results & display various info
            ResNum = TrIDLib.TrID_GetInfoNET(TrIDLib.TRID_GET_RES_NUM, 0, ref sTrIDRes);
            for (ResId = 1; ResId <= ResNum; ResId++)
            {
                TridMimeCheckResult newMimeType = new TridMimeCheckResult();
                Ret = TrIDLib.TrID_GetInfoNET(TrIDLib.TRID_GET_RES_FILETYPE, ResId, ref sTrIDRes);
                newMimeType.FileTypeName = sTrIDRes;
                Ret = TrIDLib.TrID_GetInfoNET(TrIDLib.TRID_GET_RES_FILEEXT, ResId, ref sTrIDRes);
                newMimeType.FiletypeExtension = sTrIDRes;
                Ret = TrIDLib.TrID_GetInfoNET(TrIDLib.TRID_GET_RES_POINTS, ResId, ref sTrIDRes);
                newMimeType.Point = Ret;
                listMimeTypes.Add(newMimeType);
            }
        }
        string finalConsolidatedList = string.Empty;
        if (listMimeTypes.Count > 0)
        {
            //Running iterations to find most probable match by comparing the Point.
            finalMimeResult = listMimeTypes.Aggregate((i1, i2) => i1.Point > i2.Point ? i1 : i2);
        }

        return finalMimeResult;
    }
}
Akshay Raut
  • 413
  • 5
  • 19