【发布时间】:2023-01-19 21:08:40
【问题描述】:
我有一个文件上传 webapi 端点,它接受 IFormFile 。我想将 100Mbs 到 GBs 的大文件上传到 Azure blob 存储。我想在后台上传文件,并在看到文件长度大于某个阈值后立即返回 202 accepted。
我有以下控制器和注入的服务代码:
[HttpPost]
public async Task<IActionResult> UploadFilesAsync(IFormFile uploadedFile, CancellationToken cancellationToken = default)
{
// some other code . . . .
if (uploadedFile.Length > _appConfig.Value.Threshold)
result = await _fileService.UploadFileAsync(uploadedFile, fileDataType, cancellationToken);
//map result and more code . . .
return CreatedAtRoute(nameof(GetFileAsync), new { fileId = result.FileId }, mappedDto);
}
public async Task<FileUploadResult> UploadFileAsync(IFormFile uploadedFile,CancellationToken cancellationToken)
{
var fileUploadResult = new fileUploadResult( . . .)
_ = System.Threading.Tasks.Task.Run(async () =>
{
var processResult = await _blobStorage.SaveFileAsync(uploadedFile,cancellationToken);
// upload is completed, update FileEntity status
var processStatus = processResult.HasError ? ProcessStatus.Failed : ProcessStatus.Succeeded;
await _fileRepository.UpdateFileEntityAsync(blobFileInfo, processStatus, cancellationToken);
}, cancellationToken);
return fileUploadResult ;
}
我试过 Task.Run 但我仍然注意到在使用邮递员上传时 api 仍然挂起,我还了解到不推荐 Task.Run。我可以在 .net6 中使用什么来触发后台上传过程并响应 202Accepted ?
【问题讨论】:
标签: c# asp.net-core task .net-6.0