public async Task <IActionResult> UploadTemplateFromUrl([FromBody] FromUrlRequest request) { string requestId = Guid.NewGuid().ToString(); _uploadManager.SetProgress(requestId, 0); _uploadManager.QueueUpload(request, requestId, GetUser()); return(Ok(requestId)); }
public void QueueUpload(FromUrlRequest request, string requestId, User user) { ThreadPool.QueueUserWorkItem(async _ => { using var scope = _serviceProvider.CreateScope(); var context = scope.ServiceProvider.GetService <DefaultContext>(); var service = scope.ServiceProvider.GetService <ProxmoxVmTemplateService>(); try { using var response = DownloadFile(ShareLinkConverter.ConvertUrl(request.Url)); long contentLength = long.Parse(response.Headers["Content-Length"]); using var stream = response.GetResponseStream(); await service.UploadTemplate(context, request.Name, user, stream, contentLength, progress => SetProgress(requestId, progress)); SetComplete(requestId); } catch (Exception e) { SetError(requestId); Console.Error.WriteLine(e); } }); }