提供一个C# Web API中处理大文件下载的完整接口实现示例
时间: 2024-10-22 17:26:13 浏览: 36
在C#中,处理大文件下载通常涉及到创建一个支持分块传输的Web API,因为一次性传输大文件可能会导致内存溢出。这里是一个简单的API接口实现示例,使用ASP.NET Core MVC框架:
```csharp
using Microsoft.AspNetCore.Mvc;
using System.IO;
[ApiController]
[Route("api/[controller]")]
public class FileController : ControllerBase
{
[HttpGet("download/{fileName}")]
public async Task<IActionResult> DownloadFile(string fileName)
{
string filePath = $"Files/{fileName}"; // 文件存储路径,需要确保这个路径存在并且有权限访问
if (!System.IO.File.Exists(filePath))
{
return NotFound("File not found.");
}
try
{
// 使用FileStreamResult返回一个流式响应,支持断点续传
FileStream fileStream = new FileStream(filePath, FileMode.Open);
var downloadName = Path.GetFileName(fileName); // 获取下载文件名
return File(fileStream, "application/octet-stream", downloadName, false, true);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, "Error downloading file: " + ex.Message);
}
}
}
```
在这个例子中,`DownloadFile`方法接受一个文件名参数,检查文件是否存在,然后返回一个`FileStreamResult`,它会按照HTTP标准处理大文件下载,允许客户端逐块请求和接收数据。
阅读全文