Exemplo n.º 1
0
        public async Task <IActionResult> UploadImageAsync(IFormFile imageFile, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (imageFile == null)
            {
                var error = ErrorResponsesService.BodyIsMissing(nameof(imageFile));
                return(BadRequest(error));
            }

            var imageId   = Guid.NewGuid();
            var imageName = imageId.ToString();
            var extension = Path.GetExtension(imageFile.FileName);
            var path      = $"{ImageDirectory}{imageName}{extension}";
            var stream    = imageFile.OpenReadStream();

            ClientModels.Secrets.Secret clientSecret;

            if (ImageValidationService.IsValidLength(imageFile.Length) && ImageValidationService.IsImage(stream))
            {
                var webDirectoryPath = $"{hostingEnvironment.WebRootPath}{ImageDirectory}";

                if (!Directory.Exists(webDirectoryPath))
                {
                    Directory.CreateDirectory(webDirectoryPath);
                }

                using (var fileStream = new FileStream($"{hostingEnvironment.WebRootPath}{path}", FileMode.Create))
                {
                    await imageFile.CopyToAsync(fileStream, cancellationToken).ConfigureAwait(false);

                    var creationInfo = new SecretCreationInfo(path, string.Empty);
                    var modelSecret  = await repository.CreateAsync(creationInfo, cancellationToken).ConfigureAwait(false);

                    clientSecret = Converter.SecretConverter.Convert(modelSecret);
                }
            }
            else
            {
                var error = ErrorResponsesService.InvalidImageData(nameof(imageFile));
                return(BadRequest(error));
            }

            return(Ok(clientSecret));
        }
        public Task <Secret> CreateAsync(SecretCreationInfo creationInfo, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (creationInfo == null)
            {
                throw new ArgumentNullException(nameof(creationInfo));
            }

            var id     = Guid.NewGuid();
            var secret = new Secret
            {
                Id          = id,
                ImageUrl    = creationInfo.ImageUrl,
                Description = creationInfo.Description
            };

            secrets.InsertOne(secret, cancellationToken: cancellationToken);
            return(Task.FromResult(secret));
        }