如何从注册表读取文件的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等文件还是打开错误,不知道是什么原因。。。
posted @ 2005-06-21 09:48 lovecherry 阅读(2654) 评论(2)  编辑 收藏 网摘 所属分类: webform

  回复  引用    
#1楼2006-09-12 19:53 | 冯中伟[未注册用户]

  回复  引用    
#2楼2006-11-10 16:21 | 大书虫子[未注册用户]
可能要用这样的Content-Disposition吧:
Response.AddHeader("Content-Disposition", "attachment;FileName="+YourFileName);




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 178169




相关文章:

相关链接: