我正在处理将图片上传到服务器的大负载,因此我更新了经典的[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);
}
});
});
}
任何反馈都非常感谢