public async Task <IActionResult> MovieUpload(FlowUploadForm flow, NewMovieForm newMovie) { var userId = TokenManager.ExtractUserId(User.Claims); try { foreach (var formFile in Request.Form.Files) { using (var readStream = formFile.OpenReadStream()) using (var binaryReader = new BinaryReader(readStream)) { var fileContent = binaryReader.ReadBytes((int)formFile.Length); await _uploadService.AddChunkFile(userId, fileContent, flow); } if (_uploadService.AttemptCompleteFileCreation(userId, flow, formFile.FileName, out FileMetadata metadata)) { newMovie.ResolveMovieImage(_externalDB); metadata.GetDuration(new MediaManager()); var movieEntity = newMovie.MapToEntity(userId, metadata.MapToVideoFileEntity()); movieEntity.DateCreated = DateTime.Now; movieEntity = _movieRpository.Add(movieEntity); //If file is not mp4. it cannot be streamed properly to a browser so convert it //This process takes a while. Consider moveing this out of the flow if (movieEntity.VideoFile.FileExtension != ".mp4") { _videoConverter.AddVideoToQueue(movieEntity.VideoFile); } return(Created($"api/movies/{movieEntity.MovieId}", MovieResponse.MapFromObject(movieEntity))); } } } catch { return(StatusCode(500, "There was an Error Uploading the File")); } return(Ok()); }