• 如何从注册表读取文件的ContentType


         有的时候为了不让客户端知道文件的下载地址我们不直接公开文件的url,而是采用Response.WriteFile的形式输出文件,当我们需要直接在客户端的浏览器上打开这个文件的时候问题来了,如果我们不设定Response.ContentType的话,非文本文件在浏览器上直接将会直接输出得到的结果只能是乱码,但是ContentType非常多,如果采用switch-case的方法代码比较臃肿,而且还有可能遗留扩展名,我们打开注册表可以看到每一种文件在注册表中都能找到ContentType(可以按照value查找Content Type关键词看到),既然这样就能尝试从注册表读取ContentType了。下面是一个例子:

    using Microsoft.Win32;

    string filename=@"c:\11.doc";
                System.IO.FileInfo fi
    =new System.IO.FileInfo(filename);
                
    string fileextname=fi.Extension;
                
    string DEFAULT_CONTENT_TYPE = "application/unknown";
                RegistryKey regkey,fileextkey;
                
    string filecontenttype;
                
    try 
                {                
                    regkey
    =Registry.ClassesRoot;                
                    fileextkey
    =regkey.OpenSubKey(fileextname);                
                    filecontenttype
    =fileextkey.GetValue("Content Type",DEFAULT_CONTENT_TYPE).ToString();
                }
                
    catch
                {
                    filecontenttype
    =DEFAULT_CONTENT_TYPE;
                }        
                Response.Clear();
                Response.AddHeader(
    "Content-Disposition""inline; filename=" + Server.UrlEncode(filename)); 
                Response.ContentType
    =filecontenttype;
                Response.WriteFile(filename); 

    经过测试发现,虽然ContentType是正确的,但是例如pdf等文件还是打开错误,不知道是什么原因。。。
    欢迎大家阅读我的极客时间专栏《Java业务开发常见错误100例》【全面避坑+最佳实践=健壮代码】
  • 相关阅读:
    C#全角半角转换输出解决方法
    screen命令
    Parrot Linux国内源
    screen命令在freebsd安装和使用
    sysbench0.5 在 centos7下安装 (mysql-community-server)
    Mysql中文乱码问题完美解决方案
    PHP返回数据被nginx截断问题的解决方法
    yii2笔记:asset压缩js,css文件
    Yii2笔记:activerecord和activecontroller
    yii2笔记: 模块(module)
  • 原文地址:https://www.cnblogs.com/lovecherry/p/178169.html
Copyright © 2020-2023  润新知