public async Task <IActionResult> Create([FromForm] UploadMediaRequestModel model) { if (model.File == null) { return(this.StatusCode((int)HttpStatusCode.UnprocessableEntity)); } var organisationClaim = this.User.Claims.FirstOrDefault(x => x.Type == AccountConstants.Claims.OrganisationIdClaim); var serviceModel = new CreateMediaItemServiceModel { Username = this.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value, OrganisationId = GuidHelper.ParseNullable(organisationClaim?.Value), Language = CultureInfo.CurrentCulture.Name, File = model.File }; var validator = new CreateMediaItemModelValidator(); var validationResult = await validator.ValidateAsync(serviceModel); if (validationResult.IsValid) { var mediaItemId = await this.mediaService.CreateFileAsync(serviceModel); return(this.StatusCode((int)HttpStatusCode.Created, new { Id = mediaItemId })); } return(this.StatusCode((int)HttpStatusCode.BadRequest)); }
public async Task <Guid> CreateFileAsync(CreateMediaItemServiceModel serviceModel) { var checksum = this.checksumService.GetMd5(serviceModel.File); var existingMediaItemVersion = context.MediaItemVersions.FirstOrDefault(x => x.Checksum == checksum && x.Filename == Path.GetFileNameWithoutExtension(serviceModel.File.FileName) && x.IsActive); if (existingMediaItemVersion != null) { return(existingMediaItemVersion.MediaItemId); } var mediaItem = new MediaItem { OrganisationId = serviceModel.OrganisationId, IsProtected = false }; context.MediaItems.Add(mediaItem.FillCommonProperties()); var mediaItemVersion = new MediaItemVersion { MediaItemId = mediaItem.Id, Filename = Path.GetFileNameWithoutExtension(serviceModel.File.FileName), Extension = Path.GetExtension(serviceModel.File.FileName), Folder = serviceModel.OrganisationId.ToString(), MimeType = MimeUtility.GetMimeMapping(Path.GetExtension(serviceModel.File.FileName)), Size = serviceModel.File.Length, Checksum = checksum, CreatedBy = serviceModel.Username, Version = 1 }; context.MediaItemVersions.Add(mediaItemVersion.FillCommonProperties()); var mediaItemTranslation = new MediaItemTranslation { MediaItemVersionId = mediaItemVersion.Id, Language = serviceModel.Language, Name = Path.GetFileNameWithoutExtension(serviceModel.File.FileName) }; context.MediaItemTranslations.Add(mediaItemTranslation.FillCommonProperties()); context.SaveChanges(); await this.mediaRepository.CreateFileAsync(mediaItemVersion.Id, serviceModel.OrganisationId.ToString(), serviceModel.File, serviceModel.File.FileName); return(mediaItem.Id); }