C# 从http服务流式传输大文件
我正在编写一个组件来从HTTP服务流式传输大容量(4+GB)。该组件接受URL和目标流。目标流可以是文件流,也可以是发布到不同HTTP服务的流,甚至两者都可以。作为我的组件的作者,在完成之前,我需要执行以下步骤:C# 从http服务流式传输大文件,c#,.net,http,stream,flurl,C#,.net,Http,Stream,Flurl,我正在编写一个组件来从HTTP服务流式传输大容量(4+GB)。该组件接受URL和目标流。目标流可以是文件流,也可以是发布到不同HTTP服务的流,甚至两者都可以。作为我的组件的作者,在完成之前,我需要执行以下步骤: 从HTTP流中读取大小合理的缓冲区 将此缓冲区写入目标流 刷新目标流(输出到磁盘、网络等) 我在内存中的数据缓冲区的大小永远不会超过 我正在使用flurl对服务器进行HTTP调用。我试过以下几种方法打电话 var stream = await flurlClient.GetStream
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();
在这种情况下,返回的流不再是内存流,而是网络流。在进行一些挖掘之后,我发现以下代码解决了我的问题:
var response = flurlClient.SendAsync(
HttpMethod.Get, null, null, HttpCompletionOption.ResponseHeadersRead);
var stream = response.Content.ReadAsStreamAsync();
在这种情况下,返回的流不再是内存流,而是网络流。flurl是否允许您访问底层的
网络流
?如果没有,它将不起作用。flurl是否允许您访问底层的网络流
?如果不行,那就没用了是的,这就是你想做的。这就是Flurl's的内部功能。是的,这就是你想要做的。这就是Flurl's的内部功能。