C# 流式多部分请求正文,而不等待它先上载

C# 流式多部分请求正文,而不等待它先上载,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,是否可以在发送POST请求后立即向控制器发送POST请求并读取HttpContext.request.Body流(例如,如果文件大10GB)?如果我有这样的表格: <form method="post" enctype="multipart/form-data"> public class FileController : ControllerBase { [HttpPost("[action]")] p

是否可以在发送POST请求后立即向控制器发送POST请求并读取
HttpContext.request.Body
流(例如,如果文件大10GB)?如果我有这样的表格:

<form method="post" enctype="multipart/form-data">
public class FileController : ControllerBase 
{
    [HttpPost("[action]")]
    public async Task Upload() 
    {
        var stream = HttpContext.Request.Body;
    }
}
client -> service -> FTP
如果我提交了一个文件,它会先上传该文件(如我在浏览器中看到的),然后点击控制器,整个文件保存在一个临时文件中,如您所见:

我可以验证它是否将上传的文件保存到磁盘,这对我的应用程序不起作用,因为我没有无限的存储空间。我的最终目标是将文件上载到FTP,因此请求如下:

<form method="post" enctype="multipart/form-data">
public class FileController : ControllerBase 
{
    [HttpPost("[action]")]
    public async Task Upload() 
    {
        var stream = HttpContext.Request.Body;
    }
}
client -> service -> FTP

我做错了什么?

中介绍了一系列解决方案


有一件很重要的事情没有提到,那就是你必须删除默认的活页夹。否则缓冲将启动。以下是方法-。

请查看。看起来您可以读取MultipartSection流并将内容指向FTP服务。@KirylZ我实际上已经使用MultipartReader等,但问题是在上传完成之前,控制器中的代码没有被命中。您是说在服务器端创建临时文件之前?你试过删除默认的活页夹吗?比如在这里@KirylZ,很抱歉回复太晚了。这确实奏效了。如果你想回答,那么我可以选择它作为答案,请继续!再次感谢-它工作得很好。我需要做一些修改才能让它工作,因为这一行
,因为模型绑定不读取表单,从表单绑定的参数不绑定(查询、路由和头继续工作)
。这意味着我不能传递任何POST参数或表单数据。相反,我在标题中添加了必要的内容,这可以完美地工作,但有点像黑客。所以你试图在一个请求中传递几个参数?比如文件和其他什么?基本上是的。文件是其中之一,保存文件的路径是另一个路径。我必须添加一个
X-Upload-Path
头以及传递该头的请求。第二步,我开始执行类似于
HttpContext.Request.Form的操作,它会将整个上传的文件加载到内存或磁盘中。我建议将所有参数传递到一个body中,并用boundary和Content Disposition头将它们分开。然后,通过调用MultipartReader.ReadNextSectionAsync(),将它们分别作为节来获取。是的,这肯定也是一个不错的选择。然而,我只需要这条路,这样我就不会被它打扰了