ASP.NET从注册表读取文件的ContentType

2010-08-28 10:50:35来源:西部e网作者:

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

using Microsoft.Win32;

string filename=File1.Value;//这里使用了一个HtmlInputFile
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""attachment;filename=" + Server.UrlEncode(filename)); 
Response.ContentType
=filecontenttype;
Response.WriteFile(filename); 

西部e网(weste.net)编辑:经过测试,这段程序还真是不错~~~节省了switch-case好大一段代码,也解决了比如图片、文本等不提示下载而直接显示的问题。

关键词:ASP.NET