Beispiel #1
0
        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());
        }