提供一个的C# Web API中处理大文件下载的完整接口实现示例
时间: 2024-10-22 15:14:04 浏览: 30
在C#中创建一个Web API用于处理大文件下载,通常会涉及到分块传输,避免一次性加载整个文件到内存中。以下是一个简单的API接口实现示例:
```csharp
using System.IO;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace YourNamespace.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class FileDownloadController : ControllerBase
{
private readonly string _filePath; // 假设这里的(filePath)是你要提供下载的文件路径
public FileDownloadController()
{
_filePath = "path/to/your/largefile.txt"; // 替换为实际文件路径
}
// 使用HttpGetWithFileStreamResult来支持断点续传
[HttpGet("{filename}")]
public async Task<HttpContentRangeResult> DownloadFile(string filename)
{
if (!System.IO.File.Exists(_filePath))
{
return NotFound();
}
var fileInfo = new FileInfo(_filePath);
if (string.IsNullOrEmpty(filename) || !fileInfo.Name.EndsWith(filename))
{
return BadRequest("Invalid file name or missing extension.");
}
// 开始下载
using (var fileStream = fileInfo.OpenRead())
{
int contentLength = (int)fileInfo.Length;
long byteOffset = 0;
return new HttpContentRangeResult(
fileStream,
byteOffset, // 当前开始位置
contentLength, // 文件总长度
$"bytes */{contentLength}");
}
}
}
}
```
在这个例子中,`DownloadFile`方法接收一个`filename`参数,然后检查文件是否存在并允许正确的文件名。它返回一个`HttpContentRangeResult`,该结果可以控制文件内容的发送,支持分块下载。
注意,这个示例假设客户端将自动处理断点续传,如果需要更复杂的断点功能,可能需要配合前端库如Angular或Vue.js来实现。
阅读全文