Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }