使用流(Streaming):对于大数据文件,可以利用Web API支持的流式内容返回,比如使用application/octet-stream MIME类型,并提供断点续传功能。具体的例子
时间: 2024-10-08 10:06:12 浏览: 36
fetch-stream-audio:低延迟Web音频播放示例,用于使用Fetch&Streams API解码块中的音频流
当你需要通过Web API返回大数据文件时,使用流式传输是一种常见的做法。以下是一个简单的例子:
```csharp
using System.IO;
using Microsoft.AspNetCore.Mvc;
// 假设我们有一个FileController并有一个DownloadLargeFile方法
[HttpGet("{id}", Produces = "application/octet-stream")]
public IActionResult DownloadLargeFile(long id)
{
// 假设我们有一个大文件存储在硬盘上,存储位置为largeFilesDirectory + id
string filePath = Path.Combine(largeFilesDirectory, id.ToString());
if (!System.IO.File.Exists(filePath))
{
return NotFound();
}
// 创建一个MemoryStream来保存文件内容
var memoryStream = new MemoryStream();
using (FileStream fileStream = File.OpenRead(filePath))
{
byte[] buffer = new byte[4096]; // 每次读取的数据大小
int bytesRead;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStream.Write(buffer, 0, bytesRead);
}
}
// 设置Content-Disposition头信息以支持断点续传
Response.Headers.Add("Content-Disposition", "attachment; filename=file.ext");
Response.ContentType = "application/octet-stream";
Response.ContentLength = memoryStream.Length;
// 返回流,让浏览器开始接收并下载文件
return Content(memoryStream.ToArray(), "application/octet-stream");
}
```
在这个例子中,服务器不会试图将整个大文件加载到内存中,而是按需从硬盘读取数据块,然后逐块发送给客户端,直到文件完整发送完毕。如果客户端中断了连接,下次请求时可以从上次中断的地方继续下载。
阅读全文