C# WebAPI 流式传输:逐字返回文件内容
在 C# WebAPI 中,您可以使用 Stream 流式传输功能逐字返回数据。以下是一个简单的示例,演示如何从 WebAPI 控制器返回文件内容:
public HttpResponseMessage GetFile()
{
var filePath = 'C:\path\to\file.txt';
var response = new HttpResponseMessage();
response.Content = new PushStreamContent((outputStream, httpContent, transportContext) =>
{
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
outputStream.Write(buffer, 0, bytesRead);
outputStream.Flush();
}
}
outputStream.Close();
});
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue('attachment');
response.Content.Headers.ContentDisposition.FileName = 'file.txt';
response.Content.Headers.ContentType = new MediaTypeHeaderValue('application/octet-stream');
return response;
}
在这个示例中,我们首先指定要返回的文件路径。然后,我们创建一个 HttpResponseMessage 对象,并将其 Content 属性设置为 PushStreamContent 对象。PushStreamContent 对象接受一个委托,该委托将在返回响应时被调用。在委托中,我们打开文件流并使用 while 循环逐字读取数据并将其写入输出流。最后,我们设置 ContentDisposition 和 ContentType 标头,以指示浏览器下载文件并将其保存为 'file.txt'。
请注意,这个示例非常简单,并且没有处理错误或异常。在实际应用中,您需要添加适当的错误处理逻辑以确保安全和可靠的应用程序。
通过使用 PushStreamContent,您可以高效地逐字返回大文件内容,而无需将整个文件加载到内存中。这可以有效地提高 WebAPI 应用程序的性能。
原文地址: https://www.cveoy.top/t/topic/mp3G 著作权归作者所有。请勿转载和采集!