public static ConvertionOptions FromResizeRequest(ResizeRequestModel requestModel) { var options = new ConvertionOptions { Name = requestModel.Name }; if (requestModel.Width.HasValue && requestModel.Width > 0) { options.Width = Math.Min(requestModel.Width.Value, ConvertionOptions.MaxSize); } if (requestModel.Height.HasValue && requestModel.Height > 0) { options.Height = Math.Min(requestModel.Height.Value, ConvertionOptions.MaxSize); } options.TargetFormat = GetMagickFormat(requestModel.Format); if (requestModel.Quality.HasValue && requestModel.Quality.Value >= 1 && requestModel.Quality.Value <= 100) { options.Quality = requestModel.Quality.Value; } else { options.Quality = options.TargetFormat == MagickFormat.Png24 ? 100 : 82; } return(options); }
public async Task <IActionResult> ResizeImage( [FromQuery] ResizeRequestModel requestModel, [FromServices] IWebHostEnvironment env, [FromServices] StorageService storage, [FromServices] ImageConverter converter ) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } (var fileExists, var blobFile) = await storage.TryGetFile(requestModel.Name); if (!fileExists) { return(NotFound()); } var options = ConversionOptionsFactory.FromResizeRequest(requestModel); var imageSource = await storage.GetBlobBytes(blobFile); var result = await converter.Convert(imageSource, options); if (result.Length == 0) { return(BadRequest("Could not convert file.")); } return(File(result, options.TargetMimeType)); }
public async Task <IActionResult> ResizeImage( [FromQuery] ResizeRequestModel requestModel, [FromServices] IHostingEnvironment env, [FromServices] StorageService storage, [FromServices] ImageConverter converter ) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var options = ConversionOptionsFactory.FromResizeRequest(requestModel); (var cacheExists, var cacheFile) = await storage.TryGetFileCached(options.GetCacheKey()); if (cacheExists) { // validar Etag if (IsEtagNotModified(Request, cacheFile.Properties.ETag)) { return(new NotModifiedResult( cacheFile.Properties.LastModified.GetValueOrDefault().UtcDateTime, cacheFile.Properties.ETag)); } var cacheContent = await storage.GetBlobBytes(cacheFile); return(File(cacheContent, cacheFile.Properties.ContentType, cacheFile.Properties.LastModified.GetValueOrDefault().UtcDateTime, new EntityTagHeaderValue(cacheFile.Properties.ETag))); } (var fileExists, var blobFile) = await storage.TryGetFile(requestModel.Name); if (fileExists == false) { return(NotFound()); } var imageSource = await storage.GetBlobBytes(blobFile); var result = await converter.Convert(imageSource, options); if (result.Length == 0) { return(BadRequest("Could not convert file.")); } // Salvar a imagem convertida em um blob separado (var uploadOk, var savedFile) = await storage.TryUploadToCache(options.GetCacheKey(), result, options.TargetMimeType); return(File(result, savedFile.Properties.ContentType, savedFile.Properties.LastModified.GetValueOrDefault().UtcDateTime, new EntityTagHeaderValue(savedFile.Properties.ETag))); }