C# 中的 Nodejs 等效于流式 IO,无需缓冲来自 requestContext 的内容

Nodejs equivalent in C# for streaming IO without buffering the content from requestContext

我们是否有从一个源流式传输到另一个目的地的等效方法,而不像我们在 nodeJs 中那样对其进行缓冲。

在 nodejs 中,它在读取数据块时会发出不同的事件,并且不会存储在内存缓冲区中。

我们在 C# 中有什么? .net 4.5 或 .netcore2 ?

带有管道选项的 Nodejs 示例:

 var connector = http.request(options, function(res) {
  res.pipe(response, {end:true});//tell 'response' end=true
});
request.pipe(connector, {end:true});

正如@Tseng 在评论中所写,缓冲总是需要的。 我通过将文件从 Amazon S3 流式传输到 ASP.NET Core

中的 HTTP 请求来做类似的事情
    public static async Task<Stream> GetFile(string FileId)
    {
        try
        {
            TransferUtilityOpenStreamRequest request = new TransferUtilityOpenStreamRequest();
            request.BucketName = Config.S3BucketName;
            request.Key = FileId;

            return await S3Utility.OpenStreamAsync(request);
        }
        catch (Exception e)
        {
            if (Globals.Config.IsDebug)
                Console.WriteLine("[S3] " + e.ToString());

            return null;
        }
    }

我的主控制器上有这个:

[Route("/files/{file_id}.{ext?}")]
public async Task<IActionResult> GetFile(string file_id, string ext)
{
  return File(await Globals.GetFile(file_id), BakaMime.GetMimeType(ext));
}

函数 BakaMime.GetMimeType(ext) 是一个从扩展中获取 MIME 类型的函数,仅供参考。

希望这有助于展示如何将数据从一个位置流式传输到另一个位置。