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

简介:

   在我们的系统的编写过程中,应该有很多的时候需要客户下载文件.我第一次的做法(应该也是大部分人的做法吧?)是:

1             HttpResponse response = HttpContext.Current.Response;
2              string js = "<script language=javascript>window.open('{0}');</script>";
3             js =  string.Format(js, url);
4             response.Write(js);
5

    但是有个问题了,就是会被广告拦截软件直接拦截掉,另我非常的头痛,于是寻找更好的解决方法.看了用Response.BinaryWrite写文件流一文之后觉得确实可以如此,修改代码如下:

 1 /// <summary>
 2        /// 下载文件
 3        /// </summary>
 4        /// <param name="filename">文件物理地址</param>        

 5
 6 protected  void DownloadFile( string filename)
 7          {
 8            string saveFileName = "test.xls";
 9            int intStart = filename.LastIndexOf("\\")+1;
10            saveFileName = filename.Substring(intStart,filename.Length-intStart);
11            FileStream MyFileStream; 
12            long FileSize; 
13                
14            MyFileStream = new FileStream(filename,FileMode.Open); 
15            FileSize = MyFileStream.Length; 
16                    
17            byte[] Buffer = new byte[(int)FileSize]; 
18            MyFileStream.Read(Buffer, 0, (int)FileSize); 
19            MyFileStream.Close(); 
20                
21            Response.AddHeader("Content-Disposition", "attachment;filename="+saveFileName);
22            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
23            Response.ContentType = "application/vnd.ms-excel"; 
24                
25            Response.BinaryWrite(Buffer); 
26            Response.Flush(); 
27            Response.Close(); 
28            Response.End();
29
30        }

31

 但是有个严重的问题,就是文件格式。这样只是将流输出,且无法正确识别格式。还好,能人层出不穷,  柚子Nan 提出了能否不考虑文件的类型,直接把文件显示到浏览器(Response) 的想法正好切中我的要害所在,于是急忙研究了柚子Nan的想法,修改出最后代码:

 1          /// <summary>
 2        /// 下载文件
 3        /// </summary>
 4        /// <param name="filename">文件物理地址</param>

 5          protected  void DownloadFile( string filename)
 6          {
 7            string saveFileName = "test.xls";
 8            int intStart = filename.LastIndexOf("\\")+1;
 9            saveFileName = filename.Substring(intStart,filename.Length-intStart);
10
11            Response.Clear();
12            Response.Charset = "utf-8";
13            Response.Buffer= true;
14            this.EnableViewState = false;
15            Response.ContentEncoding = System.Text.Encoding.UTF8;
16
17            Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 
18            Response.WriteFile(filename); 
19            Response.Flush();
20            Response.Close();
21
22            Response.End();
23        }


 

文件的ContentType类型 小全




 


本文转自浪子博客园博客,原文链接:http://www.cnblogs.com/walkingboy/archive/2005/09/21/241127.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Linux C# Windows
.NET使用MiniWord高效生成Word文件
.NET使用MiniWord高效生成Word文件
56 12
|
3月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
64 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
3月前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
137 1
|
4月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
108 8
|
4月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
124 4
|
4月前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
5月前
.NET 压缩/解压文件
【9月更文挑战第5天】在 .NET 中,可利用 `System.IO.Compression` 命名空间进行文件的压缩与解压。首先引入相关命名空间,然后通过 GZipStream 类实现具体的压缩或解压功能。下面提供了压缩与解压文件的方法示例及调用方式,便于用户快速上手操作。
|
6月前
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
114 4
|
6月前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
|
7月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。

热门文章

最新文章