private async Task <HttpContent> GetStoredHttpContentAsync(string rowKey, IEnumerable <KeyValuePair <string, IEnumerable <string> > > headers, bool isCompressed, CancellationToken cancellationToken) { ICloudBlockBlob blob = _blobContainer.GetBlockBlobReference(rowKey); Stream stream = await blob.OpenReadAsync(cancellationToken); if (isCompressed) { stream = new GZipStream(stream, CompressionMode.Decompress); } var httpContent = new StreamContent(stream); httpContent.Headers.AddRange(headers); return(httpContent); }
private async Task <MagickImage> OpenImageAsync(ICloudBlockBlob input, CancellationToken cancellationToken, ILogger logger, Stopwatch sw) { // Magick.NET doesn't read from the blob stream correctly, so we download the entire blob first to a buffer and read from there. // The buffer only exists for a short period in this scope, lessening memory pressure. byte[] buffer; using (var inputStream = await input.OpenReadAsync(cancellationToken)) { logger.Info("OpenStream: " + sw.ElapsedMilliseconds); buffer = new byte[inputStream.Length]; using (var ms = new MemoryStream(buffer)) { await inputStream.CopyToAsync(ms, buffer.Length, cancellationToken); } logger.Info("ReadData: " + sw.ElapsedMilliseconds); } return(new MagickImage(buffer)); }