c#webapi下载大文件完整接口实例
时间: 2024-10-22 13:13:07 浏览: 43
在C# Web API中,处理大文件下载通常涉及到分块传输或提供断点续传功能。以下是一个简单的Web API接口实例,用于下载大文件:
```csharp
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace YourNamespace.Controllers
{
[Route("api/[controller]")]
public class FileController : ControllerBase
{
[HttpGet("{fileName}")]
public async Task<IActionResult> DownloadFile(string fileName)
{
// 检查文件是否存在并获取实际路径
string filePath = GetFilePath(fileName);
if (!System.IO.File.Exists(filePath))
{
return NotFound($"文件 {fileName} 不存在");
}
// 设置响应头信息,表示这是个二进制内容,并设置适当的Content-Disposition头
var memoryStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Headers.ContentDisposition =
ContentDispositionHeaderValue.Create(fileName, null, "attachment");
// 读取文件分块并逐块发送
byte[] buffer = new byte[4096]; // 可自定义分块大小
int bytesRead;
while ((bytesRead = await memoryStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await response.Body.WriteAsync(buffer, 0, bytesRead);
}
// 关闭流并完成响应
memoryStream.Close();
return response;
}
private string GetFilePath(string fileName)
{
// 根据实际项目结构替换这里的路径
string baseDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Files"); // 假设文件存储在一个目录下
return Path.Combine(baseDirectory, fileName);
}
}
}
```
在这个例子中,用户通过HTTP GET请求访问`/api/File/{fileName}`来下载指定的文件。API会检查文件是否存在,然后创建一个HttpResponseMessage,并分块读取和发送文件内容。
阅读全文