在C#中,实现文件上传和下载是常见的Web应用程序功能,尤其在开发涉及用户交互的系统时。本文将深入探讨如何使用C#实现这两个关键功能。
1. **C# 文件上传**
文件上传通常涉及到HTML表单和服务器端的处理。在C#中,我们通常使用ASP.NET框架来实现这一功能。以下是一个简单的示例:
- 创建一个HTML页面(如MyUpload.htm)来提供文件选择和提交按钮:
```html
```
这个表单使用`enctype="multipart/form-data"`来允许文件数据的提交。
- 接着,创建对应的ASP.NET页面(UploadFile.aspx),在后台代码(UploadFile.aspx.cs)中处理文件上传:
```csharp
private string _directory = @"/File/UploadFile"; // 设置文件存储目录
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Files.Count > 0)
{
HttpPostedFileBase file = Request.Files[0];
// 检查文件大小
if (file.ContentLength > 1048576) // 1MB
{
Response.Write("文件大于1M,不能上传");
return;
}
// 检查文件类型,只允许上传特定类型的文件
string allowedExtensions = "gif|jpg|jpeg|png";
string fileExt = Path.GetExtension(file.FileName).ToLower();
if (!allowedExtensions.Contains(fileExt))
{
Response.Write("对不起!请上传图片!!");
return;
}
// 生成唯一的文件名并保存文件
string fileName = Server.MapPath(_directory) + "\\" +
DateTime.Now.ToString("yyyyMMddHHmmssfff") +
new Random().Next(10, 99).ToString() + fileExt;
file.SaveAs(fileName);
Response.Write("上传成功!");
}
}
```
这段代码首先检查文件大小是否超过限制,然后判断文件扩展名是否符合指定的图片格式。如果都通过,就生成一个唯一的文件名并保存文件。
2. **C# 文件下载**
文件下载通常涉及到提供一个链接,用户点击后触发下载。在C#中,可以通过创建一个新的ASP.NET页面(如DownloadFile.aspx)并处理下载逻辑来实现:
```csharp
public void MyDownload(string filename)
{
string filePath = Server.MapPath("/File/" + filename);
// 检查文件是否存在
if (!File.Exists(filePath))
{
Response.Write("对不起!文件不存在!!");
return;
}
// 过滤不允许下载的文件类型
string forbiddenExtensions = "asp|aspx|php|jsp|ascx|config|asa";
string fileExt = Path.GetExtension(filename).ToLower();
if (forbiddenExtensions.Contains(fileExt))
{
Response.Write("对不起!该类文件禁止下载!!");
return;
}
// 设置响应头以触发下载
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.TransmitFile(filePath);
Response.End();
}
```
这段代码首先检查文件路径的有效性,然后判断文件扩展名是否在不允许下载的列表中。如果文件是安全的,就会设置适当的HTTP响应头以触发浏览器的下载对话框,并发送文件内容。
总结,C#中实现文件上传和下载涉及了客户端HTML表单、POST请求处理、文件系统操作以及HTTP响应设置。理解这些核心概念对于构建任何涉及文件交互的C# Web应用至关重要。通过这种方式,你可以为用户提供安全、有效的文件上传和下载功能。
1