ASP.NET文件下载实现代码示例
144 浏览量
更新于2024-08-30
收藏 73KB PDF 举报
"asp.net实现文件下载的代码"
在ASP.NET中,文件下载是常见的功能需求,用于让用户能够从服务器获取文件。本文将介绍几种实现ASP.NET文件下载的方法,重点关注两种方式:使用`TransmitFile`和`WriteFile`。不过请注意,作者提到其中的第四种方法不推荐使用,但并未具体说明是哪种方法。
首先,我们来看使用`TransmitFile`的方法。`TransmitFile`是ASP.NET中的一个内建方法,它能高效地传输文件到客户端,适合大文件下载。以下是一个简单的示例:
```csharp
public partial class FileDownLoad : System.Web.UI.Page
{
// 文件名需要进行URL编码,防止乱码
private string fileName = HttpContext.Current.Server.UrlEncode("规范.rar");
private string filePath = HttpContext.Current.Server.MapPath("规范.rar");
// 使用TransmitFile下载文件
protected void btnDL1_Click(object sender, EventArgs e)
{
FileInfo info = new FileInfo(filePath);
long fileSize = info.Length;
// 设置响应头
Response.Clear();
Response.ContentType = "application/x-zip-compressed"; // 根据文件类型设置
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
// 指明Content-Length以便显示下载进度
Response.AddHeader("Content-Length", fileSize.ToString());
// 通过TransmitFile方法传输文件
Response.TransmitFile(filePath, 0, fileSize);
// 清空缓冲并关闭响应
Response.Flush();
Response.Close();
}
}
```
在这个例子中,当用户点击按钮`btnDL1`时,服务器会准备下载。`TransmitFile`方法直接从硬盘读取文件并发送到客户端,避免了加载到内存,从而节省了系统资源。
接下来,我们看看使用`WriteFile`的方法。这种方法适用于小文件,因为文件内容会被加载到内存然后再写入响应流:
```csharp
// 使用WriteFile下载文件
protected void btnDL2_Click(object sender, EventArgs e)
{
FileInfo info = new FileInfo(filePath);
long fileSize = info.Length;
// 设置响应头
Response.Clear();
Response.ContentType = "application/octet-stream"; // 默认二进制流
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
// 指明Content-Length以便显示下载进度
Response.AddHeader("Content-Length", fileSize.ToString());
// 打开文件流并写入响应流
using (FileStream fileStream = info.OpenRead())
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
Response.BinaryWrite(buffer, 0, bytesRead);
}
}
// 清空缓冲并关闭响应
Response.Flush();
Response.Close();
}
```
在这个示例中,`WriteFile`实际上是通过循环读取文件,每次读取一定数量的字节(例如4096字节),然后写入响应流。这种方式虽然灵活性较高,但对大文件不适用,因为它可能导致内存占用过高。
需要注意的是,为了确保文件名在不同的操作系统和浏览器中正确显示,文件名需要进行URL编码。此外,设置`Content-Type`是为了告诉浏览器如何处理下载的文件,如"application/x-zip-compressed"表示ZIP压缩文件,"application/octet-stream"则表示通用的二进制数据。
在实际应用中,您可能还需要考虑其他因素,如错误处理、权限验证、下载进度提示等。在进行文件下载时,确保安全性和性能优化是至关重要的。
2011-03-23 上传
2010-05-18 上传
156 浏览量
2021-01-01 上传
409 浏览量
2011-04-27 上传
202 浏览量
2020-12-22 上传
点击了解资源详情
weixin_38522323
- 粉丝: 5
- 资源: 908
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明