Asp.net直接保存文件到客户端

作者:网络 来源:佚名 更新时间:2008-11-23 17:18:57 点击:
通常的文件下载是用跳出窗口实现的,但是有个问题,就是会被广告拦截软件直接拦截掉,另我非常的头痛,于是寻找更好的解决方法.看了用response.binarywrite写文件流一文之后觉得确实可以如此。
    如下代码实现了此功能,解决了文件格式问题(就是只将流输出,但无法正确识别文件格式),并且从注册表读取文件的contenttype

1 /**//// <summary>
2 /// 下载文件
3 /// </summary>
4 /// <param name="filename">文件物理地址</param>
5 protected void downloadfile(string filename)
6 {
7
8 string savefilename = "test.xls";
9 int intstart = filename.lastindexof("\\")+1;
10 savefilename = filename.substring(intstart,filename.length-intstart);
11
12 system.io.fileinfo fi=new system.io.fileinfo(filename);
13 string fileextname=fi.extension;
14 string default_content_type = "application/unknown";
15 registrykey regkey,fileextkey;
16 string filecontenttype;
17 try
18 {
19 regkey=registry.classesroot;
20 fileextkey=regkey.opensubkey(fileextname);
21 filecontenttype=fileextkey.getvalue("content type",default_content_type).tostring();
22 }
23 catch
24 {
25 filecontenttype=default_content_type;
26 }
27
28
29 response.clear();
30 response.charset = "utf-8";
31 response.buffer= true;
32 this.enableviewstate = false;
33 response.contentencoding = system.text.encoding.utf8;
34
35 response.appendheader("content-disposition","attachment;filename=" + savefilename);
36 response.contenttype=filecontenttype;
37
38 response.writefile(filename);
39 response.flush();
40 response.close();
41
42 response.end();
43 }

效果图如下: