gpt4 book ai didi

c# - ASP.NET Core 流 - 将 block 写入请求

转载 作者:行者123 更新时间:2023-11-30 23:05:41 24 4
gpt4 key购买 nike

这是更新的问题,我的代码中曾经有一个错误

我希望能够将数据 block 发送到客户端。

任何事情都会受到赞赏。

有没有一种方法可以为 asp.net core 提供对数据流式传输方式的更多控制。

我担心下面的代码如何扩展。

有人可以建议如何通过 asp.net core 中的 web api 流式传输数据吗?

提供的答案和下面的代码有效。我不确定它是如何扩展的?

是否可以检索数据 block 并将它们写入请求,只将数据 block 放入内存。这样我就可以下载非常大的文件。

using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
return File(System.IO.File.OpenRead(filePath), "audio/mpeg");
}

最佳答案

应用 FileStream 方法 - 如前所述 - 使用 FileStream constructor它接受一个 bufferSize 参数,该参数指定读入内存的字节数。
(您可以否决默认值 (4096) 以适应您的环境。)

public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize);

bufferSize:
A positive System.Int32 value greater than 0 indicating the buffer size.
The default buffer size is 4096.

public IActionResult GetFile()
{
var filePath = @"c:\temp\file.mpg"; // Your path to the audio file.
var bufferSize = 1024;
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize);
return File(fileStream, "audio/mpeg");
}

请注意,无需处理 fileStreamFile 方法会处理这个问题。


澄清一下:

当传入一个 FileStream 时,它的内容被分块读取(匹配配置的缓冲区大小)。
具体来说,这意味着它的 Read 方法 (int Read (byte[] array, int offset, int count)) 被重复执行,直到所有字节都被读取,确保内存中存储的字节数不超过给定的字节数。

所以可扩展性是在较少的内存使用中,因为内存是一种资源,如果文件的大小很大,特别是与高读取频率(这个文件或其他文件)相结合,内存可能会受到压力这可能会导致内存不足问题。

关于c# - ASP.NET Core 流 - 将 block 写入请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com