gpt4 book ai didi

c# - 从 http 服务流式传输大文件

转载 作者:行者123 更新时间:2023-12-01 22:12:51 25 4
gpt4 key购买 nike

我正在编写一个组件来从 HTTP 服务流式传输大型(4+ GB)数据。该组件采用 URL 和目标流。目标流可以是文件流,也可以是 POST 到不同 HTTP 服务的流,或者两者兼而有之。作为我的组件的作者,我需要执行以下步骤直到完成:

  1. 从 HTTP 流中读取一个合理大小的缓冲区,
  2. 将此缓冲区写入目标流,
  3. 刷新目标流(输出到磁盘、网络等)

我的数据永远不会超过内存中数据缓冲区的大小。

我正在使用 flurl 对服务器进行 HTTP 调用。我尝试了以下方式来调用电话

var stream = await flurlClient.GetStreamAsync();

这会返回一个 MemoryStream,它不起作用,因为它会填满并占用与文件大小一样多的内存。

var response = flurlClient.GetAsync();
var stream = response.Content.ReadAsStreamAsync();

同样,内存流。

var response = flurlClient.GetAsync();
var stream = new CustomFlushingSteam();
response.Content.CopyToAsync(stream);

这个看起来很有前途,但遗憾的是,它试图使用单个 Write() 语句编写整个内容。

如何在不破坏内存的情况下完成这项任务?我更喜欢使用 flurl,但我不受其约束。

最佳答案

经过一些挖掘,我发现下面的代码解决了我的问题:

var response = flurlClient.SendAsync(
HttpMethod.Get, null, null, HttpCompletionOption.ResponseHeadersRead);
var stream = response.Content.ReadAsStreamAsync();

在这种情况下,返回的流不再是内存流而是网络流。

关于c# - 从 http 服务流式传输大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859178/

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