C# 从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

我正在编写一个组件来从HTTP服务流式传输大容量(4+GB)。该组件接受URL和目标流。目标流可以是文件流,也可以是发布到不同HTTP服务的流,甚至两者都可以。作为我的组件的作者,在完成之前,我需要执行以下步骤:

  • 从HTTP流中读取大小合理的缓冲区
  • 将此缓冲区写入目标流
  • 刷新目标流(输出到磁盘、网络等)
  • 我在内存中的数据缓冲区的大小永远不会超过

    我正在使用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();
    

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

    在进行一些挖掘之后,我发现以下代码解决了我的问题:

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

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

    flurl是否允许您访问底层的
    网络流
    ?如果没有,它将不起作用。flurl是否允许您访问底层的
    网络流
    ?如果不行,那就没用了是的,这就是你想做的。这就是Flurl's的内部功能。是的,这就是你想要做的。这就是Flurl's的内部功能。