C# 四种实现文件下载
"C# 四种实现文件下载" 本文将介绍四种使用 C# 实现文件下载的方法,分别是使用 TransmitFile、WriteFile、WriteFile 分块下载和流方式下载。这些方法可以满足不同的下载需求,以下是每种方法的详细介绍: 一、TransmitFile 实现下载 TransmitFile 是 ASP.NET Framework 提供的一个方法,可以用来下载文件。使用 TransmitFile 可以避免使用 Response.BinaryWrite 下载大文件时可能出现的 Aspnet_wp.exe 进程回收问题。 在 ASP.NET 中,可以使用 Response 对象的 TransmitFile 方法来下载文件。下面是一个使用 TransmitFile 下载文件的示例代码: ```csharp Response.ContentType = "application/x-zip-compressed"; Response.AddHeader("Content-Disposition", "attachment;filename=z.zip"); string filename = Server.MapPath("DownLoad/z.zip"); Response.TransmitFile(filename); ``` 在上面的代码中,我们首先设置了 Response 对象的 ContentType 和 ContentDisposition,分别表示文件的类型和保存的文件名。然后,我们使用 TransmitFile 方法来下载文件。 二、WriteFile 实现下载 WriteFile 是另一种实现文件下载的方法,它可以用来下载大文件。使用 WriteFile 可以避免使用 Response.BinaryWrite 下载大文件时可能出现的 Aspnet_wp.exe 进程回收问题。 下面是一个使用 WriteFile 下载文件的示例代码: ```csharp string fileName ="asd.txt";//客户端保存的文件名 string filePath=Server.MapPath("DownLoad/aaa.txt");//路径 FileInfo fileInfo = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); Response.AddHeader("Content-Length", fileInfo.Length.ToString()); Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentType = "application/octet-stream"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.WriteFile(fileInfo.FullName); Response.Flush(); Response.End(); ``` 在上面的代码中,我们首先获取了文件的路径和信息,然后设置了 Response 对象的头信息,最后使用 WriteFile 方法来下载文件。 三、WriteFile 分块下载 WriteFile 分块下载是一种高效的下载方法,可以用来下载大文件。使用 WriteFile 分块下载可以避免服务器的压力,并且可以实现断点续传。 下面是一个使用 WriteFile 分块下载的示例代码: ```csharp string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 FileInfo fileInfo = new FileInfo(filePath); if (fileInfo.Exists == true) { const long ChunkSize = 102400;//100K 每次读取文件,只读取 100K,这样可以缓解服务器的压力 byte[] buffer = new byte[ChunkSize]; Response.Clear(); FileStream iStream = File.OpenRead(filePath); long dataLengthToRead = iStream.Length;//获取下载的文件总大小 Response.ContentType = "application/octet-stream"; // ... } ``` 在上面的代码中,我们首先获取了文件的路径和信息,然后设置了 Response 对象的头信息。然后,我们使用 FileStream 对象来读取文件,并将其分块传输给客户端。 四、流方式下载 流方式下载是一种灵活的下载方法,可以用来下载大文件。使用流方式下载可以避免服务器的压力,并且可以实现断点续传。 下面是一个使用流方式下载的示例代码: ```csharp string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 FileInfo fileInfo = new FileInfo(filePath); if (fileInfo.Exists == true) { FileStream iStream = File.OpenRead(filePath); long dataLengthToRead = iStream.Length;//获取下载的文件总大小 Response.ContentType = "application/octet-stream"; byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = iStream.Read(buffer, 0, buffer.Length)) > 0) { Response.OutputStream.Write(buffer, 0, bytesRead); } Response.Flush(); Response.End(); } ``` 在上面的代码中,我们首先获取了文件的路径和信息,然后设置了 Response 对象的头信息。然后,我们使用 FileStream 对象来读取文件,并将其传输给客户端。 这四种方法都可以用来实现文件下载,但是它们之间有所不同。TransmitFile 和 WriteFile 方法可以用来下载小文件,而 WriteFile 分块下载和流方式下载可以用来下载大文件。
- x2801256262012-12-09很强大 需要研究下 我是菜鸟
- linkmq2014-03-08没什么用,说了一堆乱七八糟的东西
- 粉丝: 1
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (175128050)c&c++课程设计-图书管理系统
- 视频美学多任务学习中PyTorch的多回归实现-含代码及解释
- 基于ssh员工管理系统
- 5G SRM815模组原理框图.jpg
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 操作系统实验 Ucore lab5
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理