public async Task <IActionResult> UploadFile([FromQuery] string folderId) { if (!_multipartRequestHelper.IsMultipartContentType(Request.ContentType)) { return(BadRequest($"Expected a multipart request, but got {Request.ContentType}")); } try { var createFolder = string.IsNullOrEmpty(folderId) && !await _filesRepository.FolderExists(folderId); if (createFolder) { var folder = new Folder { NameId = "My Folder Id", }; await _filesRepository.AddFolder(folder); folderId = folder.Id; } var boundary = _multipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), _defaultFormOptions.MultipartBoundaryLengthLimit); var reader = new MultipartReader(boundary, HttpContext.Request.Body); var fileDesc = new FileDescription { Url = "api/Files/download-file?id={id}&file={path}" }; FileAccumulator newFile = null; newFile = await _mongoStreamer.UploadFileAsync(reader); if (newFile != null) { fileDesc.Id = newFile.Id; fileDesc.Url = fileDesc.Url.Replace("{id}", newFile.Id).Replace("{path}", Uri.EscapeDataString(newFile.Filename)); fileDesc.Name = newFile.Filename; fileDesc.Created_time = DateTime.UtcNow; if (!await _filesRepository.AddFileToFolder(folderId, fileDesc)) { return (BadRequest(new { ErrorDescription = "Could not upload." })); } return(Ok(new { Folder = folderId, FileUrl = fileDesc.Url })); } else { _logger.LogError($"{DateTime.UtcNow} Upload failed."); return (BadRequest(new { Errors = new { Image = new object[] { new { ErrorMessage = "There is no image to upload" } } }, ErrorDescription = "Could not upload." })); } //return Ok(new { Edge = post_edge, ImageUrl = template.Url }); } catch (Exception e) { _logger.LogError(e.Message); return (BadRequest(new { e.StackTrace, ErrorDescription = "Could not fulfill the request." })); } }