ASP.NET Web API 通过文件流下载文件的实例
在 ASP.NET Web API 开发中,返回文件供用户下载是常见需求。本示例演示如何通过构建 HttpResponseMessage,将服务器上的物理文件流直接作为响应内容输出,从而触发客户端的文件保存行为。
实现原理
核心思路是在 Controller 动作方法中:
- 获取服务器上目标文件的物理路径。
- 创建指向该路径的文件流(
FileStream)。 - 构造
HttpResponseMessage对象,状态码设为200 OK。 - 将文件流封装为
StreamContent赋值给响应的Content属性。 - 设置响应头:
ContentType设为application/octet-stream以表示二进制流,ContentDisposition设为attachment并指定文件名以触发下载。
操作步骤
第1步:添加必要的命名空间引用
确保控制文件引入以下基础库,以便使用文件系统、HTTP 消息头等类:
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Hosting; // 用于解析虚拟路径为物理路径
第2步:配置 DownloadController 控制器
创建一个继承自 ApiController 的控制器,并定义路由前缀。以下是完整的控制器代码示例,其中包含错误处理机制:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Http;
namespace DownloadFileFromWebApi.Controllers
{
[RoutePrefix("download")]
public class DownloadController : ApiController
{
[Route("get_demo_file")]
public HttpResponseMessage GetFileFromWebApi()
{
try
{
// 1. 将虚拟路径 (~/) 转换为服务器物理路径
var FilePath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/download/EditPlus64_xp85.com.zip");
// 2. 打开文件流
var stream = new FileStream(FilePath, FileMode.Open);
// 3. 构建 HTTP 响应
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
// 4. 设置内容类型为二进制流
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
// 5. 设置附件头,指定浏览器下载时的默认文件名
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Wep Api Demo File.zip"
};
return response;
}
catch
{
// 若发生异常,返回空内容或错误状态
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
}
}
第3步:验证下载功能
部署应用后,通过浏览器访问对应的 API 地址(例如:http://localhost:端口号/download/get_demo_file)。浏览器接收到带有 attachment 头的响应后,通常会弹出“保存文件”对话框,而非直接在页面中显示。此时即可测试文件的完整性与下载流程是否通畅。
注意事项
- 路径映射:务必使用
HostingEnvironment.MapPath正确解析虚拟目录路径,避免因为运行环境不同导致找不到文件。 - 大文件优化:当前示例直接将整个文件加载到内存流中传输。对于超大文件,建议考虑使用异步流处理或断点续传机制以提升性能。
- 安全权限:确保运行 ASP.NET 应用的账户对目标文件具有读取权限。
以上就是 ASP.NET Web API 通过文件流下载文件的详细内容,更多关于 C# API 开发的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









