public async Task <ImageShortInfo> DeleteOriginalImageMetadata(string imageId, string partitionKey) { _logger.LogDebug(MetadataRemoving, imageId, partitionKey); var metadata = await _metadataStorage.GetMetadata(new List <string> { imageId }, partitionKey, CancellationToken.None); if (metadata == null || !metadata.Any()) { return(null); } var deletedMetadata = await _metadataStorage.RemoveMetadata(imageId, partitionKey, CancellationToken.None); if (!deletedMetadata) { return(null); } _logger.LogInformation(MetadataRemoved, imageId); var imageMetadata = metadata[0]; return(new ImageShortInfo { ImageId = imageMetadata.Id, ImageName = imageMetadata.Name, ThumbnailNames = imageMetadata.Thumbnails != null ? imageMetadata.Thumbnails.Select(x => x.Name).ToArray() : new string[0] }); }
public async Task <ImagesSearchResult> Search(string[] imageIds, string partitionKey) { var imagesMetadata = await _metadataStorage.GetMetadata(imageIds, partitionKey, CancellationToken.None); ImagesSearchResult result = new ImagesSearchResult { Images = new List <ImageFullInfoWithThumbnails>(imagesMetadata.Count) }; foreach (var imageMetadata in imagesMetadata) { var model = new ImageFullInfoWithThumbnails { Id = imageMetadata.Id, Bytes = imageMetadata.SizeBytes, Hash = imageMetadata.MD5Hash, Height = imageMetadata.Height, Width = imageMetadata.Width, Tags = imageMetadata.Tags ?? new Dictionary <string, string>(), Url = _blobStorage.GetImageUri(imageMetadata.Name, ImageSizeType.Original).ToString(), DateAdded = imageMetadata.DateAddedUtc, MimeType = imageMetadata.MimeType, Thumbnails = new List <ImageInfo>() }; //todo if an image was added a long time ago and there are not any thumbnails, it's worth sending a new event to generate them if (imageMetadata.Thumbnails != null) { foreach (var thumbnail in imageMetadata.Thumbnails) { model.Thumbnails.Add(new ImageInfo { Id = thumbnail.Id, Bytes = thumbnail.SizeBytes, Hash = thumbnail.MD5Hash, Height = thumbnail.Height, Width = thumbnail.Width, DateAdded = thumbnail.DateAddedUtc, MimeType = thumbnail.MimeType, Url = _blobStorage.GetImageUri(thumbnail.Name, ImageSizeType.Thumbnail).ToString() }); } } result.Images.Add(model); } _logger.LogInformation(FoundImages, result.Images.Count, imageIds.Length); return(result); }
public async Task <List <ImageThumbnailGeneratingResult> > GenerateThumbnails(string imageId, string partitionKey) { var imageMetadataList = await _metadataStorage.GetMetadata(new List <string> { imageId }, partitionKey, CancellationToken.None); if (imageMetadataList == null || !imageMetadataList.Any()) { _logger.LogInformation(ImageNotFound, imageId); return(null); } var imageMetadata = imageMetadataList[0]; imageMetadata.Thumbnails = new List <ImageThumbnail>(); _logger.LogDebug(MetadataReceived, imageMetadata.Id, imageMetadata.Width, imageMetadata.Height); if (imageMetadata.Width <= _thumbnailTargetWidth.Last()) { _logger.LogInformation(ImageSmallerThanTargetWidth, imageMetadata.Id, imageMetadata.Width); return(new List <ImageThumbnailGeneratingResult>(0)); } using var originalImageStream = await _blobStorage.DownloadImage(imageMetadata.Name, ImageSizeType.Original, CancellationToken.None); _logger.LogDebug(ImageDownloaded, imageMetadata.Id); StorageImageType imageType = imageMetadata.ImageType; string mimeType = imageMetadata.MimeType; string fileExtension = imageMetadata.FileExtension; if (imageType == StorageImageType.BMP) { imageType = StorageImageType.PNG; mimeType = PngMimeType; fileExtension = PngFileExtension; } var imageStream = originalImageStream; foreach (var targetWidth in _thumbnailTargetWidth) { if (targetWidth >= imageMetadata.Width) { continue; } var resizingResult = _imageResizing.Resize(imageStream, (ImageType)imageType, targetWidth); _logger.LogDebug(ImageResized, imageMetadata.Id, resizingResult.Size); var thumbnailImageId = _imageIdentifierProvider.GenerateUniqueId(); var thumbnailImageName = _imageIdentifierProvider.GetImageName(thumbnailImageId, fileExtension); var uploadedBlob = await _blobStorage.UploadImage(thumbnailImageName, resizingResult.Image, ImageSizeType.Thumbnail, mimeType, CancellationToken.None); imageMetadata.Thumbnails.Add(new ImageThumbnail { Id = thumbnailImageId, Name = thumbnailImageName, MD5Hash = uploadedBlob.MD5Hash, DateAddedUtc = uploadedBlob.DateAdded.DateTime, MimeType = mimeType, Height = resizingResult.Size.Height, Width = resizingResult.Size.Width, SizeBytes = resizingResult.Size.Bytes }); imageStream = resizingResult.Image; } imageStream.Dispose(); imageMetadata.Thumbnails.Reverse(); await _metadataStorage.SetMetadata(imageMetadata, CancellationToken.None); _logger.LogInformation(ThumbnailsGenerated, imageMetadata.Thumbnails.Count, imageId); return(imageMetadata.Thumbnails.Select(x => new ImageThumbnailGeneratingResult { Id = x.Id, Width = x.Width, Height = x.Height, MimeType = x.MimeType }).ToList()); }