/// <summary> /// Send resize image message /// </summary> /// <param name="blobHandle">Blob handle</param> /// <param name="imageType">Image type</param> /// <returns>Send message task</returns> public async Task SendResizeImageMessage(string blobHandle, ImageType imageType) { ResizeImageMessage message = new ResizeImageMessage() { BlobHandle = blobHandle, ImageType = imageType }; Queue queue = await this.QueueManager.GetQueue(this.QueueIdentifier); await queue.SendAsync(message); }
/// <summary> /// Process message /// </summary> /// <param name="message">Queue message</param> /// <returns>Process message task</returns> protected override async Task Process(IMessage message) { if (message is ResizeImageMessage) { ResizeImageMessage resizeImageMessage = message as ResizeImageMessage; if (resizeImageMessage.DequeueCount == 1) { await this.blobsManager.CreateImageResizes(ProcessType.Backend, resizeImageMessage.BlobHandle, resizeImageMessage.ImageType); } else { await this.blobsManager.CreateImageResizes(ProcessType.BackendRetry, resizeImageMessage.BlobHandle, resizeImageMessage.ImageType); } } }
public void ResizeImage(ResizeImageMessage resizeImageMessage, ILogger logger) { var resizeTask = Task.Run(async() => { try { var connectionString = _configuration[$"Storage:Blobs:{resizeImageMessage.BlobStorageName}:ConnectionString"] ?? throw new ApplicationException($"Could not find 'Storage:Blobs:{resizeImageMessage.BlobStorageName}:ConnectionString' configuration section"); var cloudBlockBlob = new CloudBlockBlob(new Uri(resizeImageMessage.FullBlobPath), GetBlobClient(connectionString)); if (await cloudBlockBlob.ExistsAsync()) { using (var stream = new MemoryStream()) { await cloudBlockBlob.DownloadToStreamAsync(stream); using (var bitmap = new Bitmap(stream)) { var newSize = resizeImageMessage.Size == ImageSize.L ? _largeSize : resizeImageMessage.Size == ImageSize.M ? _mediumSize : _smallSize; using (var resizedImage = FixedSize(bitmap, newSize)) { var imageFullPath = $"{resizeImageMessage.Location}\\{resizeImageMessage.OriginalName}-{resizeImageMessage.Size}.jpg"; var resizedImageBlob = cloudBlockBlob.Container.GetBlockBlobReference(imageFullPath); var bytes = ImageToByteArray(resizedImage); await resizedImageBlob.UploadFromByteArrayAsync(bytes, 0, bytes.Length); resizedImageBlob.Properties.ContentType = "image/jpeg"; await resizedImageBlob.SetPropertiesAsync(); } } } } } catch (Exception e) { logger.LogError(e.Message); } }); resizeTask.Wait(); }