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))); }