ASPNET Core 2.1读/流FormCollection

时间:2019-01-23 14:33:34

标签: angular http asp.net-core

我正在处理将图片上传到服务器的大负载,因此我更新了经典的[HttpPost] + [FromBody]以开始使用FormCollection并分块发送实际内容。到目前为止,到目前为止还不错,我可以使用以下代码:

            [HttpPost]
            [Authorize]
            [DisableRequestSizeLimit]
            public async Task<IActionResult> PostAsync()
            {
                var form = await Request.ReadFormAsync();

                var myObject= JsonConvert.DeserializeObject<MyObject>(form["data"]);

                for(var i = 0; i < form.Files.Count; ++i)
                {
                    myObject.Images[i].File = form.Files.ElementAt(i) as FormFile;
                }
                ...more stuff and return 201 if created otherwise 202
            }

我的第一个问题是知道ReadFormAsync是否正确。我发现,除非我将其放到适当的位置,否则将开始发送数据流,但是API也会开始运行该方法,并且如果有意义的话,实际上没有数据到达。我不确定是否有一些现成的东西可以帮我做到这一点-诸如属性之类的东西(我正在这里寻找最佳实践)。

然后,我的第二个问题是我实际上必须在文件之间拆分数据(以将其拆分为form.Files部分和要在UI中序列化为Json的实际对象。我不确定这是否也是正确或是否应该以其他方式完成。

我正在使用Angular 7 UI来执行请求:

        public post(formData: FormData): Promise<boolean> {
            const headers = new HttpHeaders({
                'Authorization': this.authService.getAuthorizationHeaderValue()
            });

            const uploadReq = new HttpRequest('POST', `${environment.apiBaseUrl}/myEndpoint/`, formData, {
                reportProgress: false,
                headers: headers
            });

            return new Promise<boolean>((r) => {
                this.http.request<boolean>(uploadReq).subscribe(event => {
                    if (event.type === HttpEventType.Response) {
                    r(event.body);
                }
            });
        });
     }

任何反馈都非常感谢

0 个答案:

没有答案