下面我将详细讲解C#实现文件上传下载Excel文档的示例代码攻略。
1. 实现文件上传
1.1 编写HTML表单
首先,我们需要在前端编写一个HTML表单,让用户选择要上传的文件和提交表单。
<form action="UploadFileHandler.ashx" enctype="multipart/form-data" method="post">
<input type="file" name="fileUpload" />
<input type="submit" value="上传" />
</form>
上面代码中,form
元素的action
属性指定了提交表单的处理程序,enctype
属性指定了表单数据编码类型为multipart/form-data
,method
属性指定了提交表单的方式为POST。
1.2 编写上传处理程序
接着,我们需要编写一个处理程序来处理上传的文件,并将其保存到服务器端。在C#中实现文件上传的关键是使用HttpPostedFile
类型表示上传的文件,可以通过Request.Files
属性获取上传的文件。以下是一个简单的上传处理程序:
public class UploadFileHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
string filePath = context.Server.MapPath("~/Uploads/"); // 上传文件保存的目录
HttpPostedFile file = context.Request.Files["fileUpload"]; // 获取上传的文件
if (file != null && file.ContentLength > 0) {
string fileName = Path.GetFileName(file.FileName); // 获取上传文件的文件名
file.SaveAs(Path.Combine(filePath, fileName)); // 将上传的文件保存到目标目录
}
context.Response.Write("上传成功!");
}
public bool IsReusable {
get {
return false;
}
}
}
上面的代码根据form
表单中的action
属性,将上传的文件保存到~/Uploads/
目录下。可以通过修改filePath
变量指定文件保存的目录。如果文件上传成功,则向浏览器输出一条提示信息。
2. 实现文件下载
2.1 编写下载链接
接下来,我们需要在页面上添加一个下载链接,让用户点击链接后可以下载指定的文件。以下是一个下载链接的示例:
<a href="DownloadFileHandler.ashx?fileName=myfile.xlsx">下载文件</a>
上面代码中,href
属性指定了下载文件的处理程序为DownloadFileHandler.ashx
,并通过?
传递了参数fileName
,值为myfile.xlsx
。
2.2 编写下载处理程序
最后,我们需要编写一个处理程序来处理下载请求。该处理程序根据请求中的参数fileName
,返回指定的文件。以下是一个简单的下载处理程序:
public class DownloadFileHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
string fileName = context.Request.Params["fileName"]; // 获取要下载的文件名
string filePath = context.Server.MapPath("~/Uploads/" + fileName); // 文件路径
if (File.Exists(filePath)) {
context.Response.Clear();
context.Response.ContentType = "application/vnd.ms-excel"; // 设置文件类型为Excel
context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // 设置文件名
context.Response.WriteFile(filePath); // 将文件输出
context.Response.End(); // 停止页面响应
} else {
context.Response.Write("文件不存在!");
}
}
public bool IsReusable {
get {
return false;
}
}
}
上面的代码首先根据fileName
参数获取将要下载的文件名,并通过Server.MapPath
方法将其转换为文件路径。如果文件存在,则向浏览器输出文件内容,并使用Content-Disposition
响应头指定文件名和附件下载类型,使得浏览器提示用户下载该文件。如果文件不存在,则输出一条错误信息。
示例代码
下面提供两个示例代码,一个是文件上传处理程序,另一个是文件下载处理程序:
文件上传处理程序
public class UploadFileHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
string filePath = context.Server.MapPath("~/Uploads/");
HttpPostedFile file = context.Request.Files["fileUpload"];
if (file != null && file.ContentLength > 0) {
string fileName = Path.GetFileName(file.FileName);
file.SaveAs(Path.Combine(filePath, fileName));
}
context.Response.Write("上传成功!");
}
public bool IsReusable {
get {
return false;
}
}
}
文件下载处理程序
public class DownloadFileHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
string fileName = context.Request.Params["fileName"];
string filePath = context.Server.MapPath("~/Uploads/" + fileName);
if (File.Exists(filePath)) {
context.Response.Clear();
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
context.Response.WriteFile(filePath);
context.Response.End();
} else {
context.Response.Write("文件不存在!");
}
}
public bool IsReusable {
get {
return false;
}
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现文件上传下载Excel文档示例代码 - Python技术站