public async Task <IActionResult> AddServiceImage([FromForm] ServiceImageRequest request)
        {
            try
            {
                await _serviceImageUseCase.ExecuteCreate(request).ConfigureAwait(false);

                return(Ok());
            }
            catch (UseCaseException e)
            {
                return(BadRequest(e));
            }
        }
        public async Task ExecuteCreate(ServiceImageRequest request)
        {
            var fileInfo = await _repositoryGateway.UploadImage(request).ConfigureAwait(false);

            if (fileInfo != null)
            {
                try
                {
                    _servicesGateway.AddFileInfo(request.ServiceId, fileInfo);
                }
                catch (Exception e)
                {
                    LoggingHandler.LogError(e.Message);
                    LoggingHandler.LogError(e.StackTrace);
                    throw;
                }
            }
        }
Beispiel #3
0
        public async Task <Infrastructure.File> UploadImage(ServiceImageRequest request)
        {
            var fileExtension    = Path.GetExtension(request.Image.FileName);
            var putObjectRequest = new PutObjectRequest();
            var originalFileName = $"{request.ServiceId.ToString()}-original{fileExtension}";
            var resizedFileName  = $"{request.ServiceId.ToString()}-medium{fileExtension}";

            putObjectRequest.BucketName  = _repositoryBucket;
            putObjectRequest.Key         = _imagesFolder + "/" + originalFileName;
            putObjectRequest.InputStream = request.Image.OpenReadStream();
            try
            {
                await _s3Client.PutObjectAsync(putObjectRequest).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                LoggingHandler.LogError(e.Message);
                LoggingHandler.LogError(e.StackTrace);
                throw;
            }

            // Use ImageSharper to resize image and save resized version to S3
            // memory stream
            using (var memoryStream = new MemoryStream())

                // Open the file automatically detecting the file type to decode it.
                // Our image is now in an uncompressed, file format agnostic, structure in-memory as
                // a series of pixels.
                using (Image image = Image.Load(request.Image.OpenReadStream()))
                {
                    // Resize the image in place and return it for chaining.
                    // 'x' signifies the current image processing context.
                    image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2));

                    var encoder = new JpegEncoder()
                    {
                        Quality = 30 //Use variable to set between 5-30 based on your requirements
                    };

                    // The library automatically picks an encoder based on the file extension then
                    // encodes and write the data to disk.
                    // You can optionally set the encoder to choose.
                    image.Save(memoryStream, encoder);
                    putObjectRequest.Key         = _imagesFolder + "/" + resizedFileName;
                    putObjectRequest.InputStream = memoryStream;
                    try
                    {
                        await _s3Client.PutObjectAsync(putObjectRequest).ConfigureAwait(false);
                    }
                    catch (Exception e)
                    {
                        LoggingHandler.LogError(e.Message);
                        LoggingHandler.LogError(e.StackTrace);
                        throw;
                    }
                }// Dispose - releasing memory into a memory pool ready for the next image you wish to process.
            var fileEntity = new Infrastructure.File();

            fileEntity.Url       = $"{_imagesBaseUrl}/{_imagesFolder}/{originalFileName};{_imagesBaseUrl}/{_imagesFolder}/{resizedFileName}";
            fileEntity.CreatedAt = DateTime.Now;
            return(fileEntity);
        }