C# 下载Azure blob并将其设置为图像标记上的数据url

C# 下载Azure blob并将其设置为图像标记上的数据url,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我正在尝试从专用Azure blob存储容器下载blob,并将其显示在图像标签中 关于下面的问题,您可以看到我是如何以流格式从Web API返回blob的 从HTTP响应中,我可以通过将blob的内容类型包含在请求的headers部分来检索它。使用它生成要在图像标记上使用的数据URI。我知道我需要将流转换为base64字符串,以便能够将其包含在图像标记的src属性中。我目前正在努力将HTTP请求的结果转换为base64字符串 我创建了这个js FIDLE,其中包含从HTTP请求接收的数据图像,以

我正在尝试从专用Azure blob存储容器下载blob,并将其显示在图像标签中

关于下面的问题,您可以看到我是如何以流格式从Web API返回blob的

从HTTP响应中,我可以通过将blob的内容类型包含在请求的headers部分来检索它。使用它生成要在图像标记上使用的数据URI。我知道我需要将流转换为base64字符串,以便能够将其包含在图像标记的src属性中。我目前正在努力将HTTP请求的结果转换为base64字符串

我创建了这个js FIDLE,其中包含从HTTP请求接收的数据图像,以及我将数据转换为base64字符串的尝试:

'http://jsfiddle.net/chesco9/6a7ohgho/'
编辑

汤姆,谢谢你的帮助。我能够实施您的解决方案,并且成功了。我已经在这个问题上纠缠了好几天了

public async Task<AzureBlobModel> DownloadBlob(Guid blobId)
    {
        try
        {
            //get picture record
            Picture file = await _media.GetPictureAsync(blobId);

            // get string format blob name
            var blobName = file.PictureId.ToString() + file.Extension;

            if (!String.IsNullOrEmpty(blobName))
            {
                var blob = _container.GetBlockBlobReference(blobName);

                // Strip off any folder structure so the file name is just the file name
                var lastPos = blob.Name.LastIndexOf('/');
                var fileName = blob.Name.Substring(lastPos + 1, blob.Name.Length - lastPos - 1);

                var fileLength = blob.Properties.Length;
                var stream = await blob.OpenReadAsync();

                MemoryStream ms = new MemoryStream();
                stream.CopyTo(ms);

                var result = new AzureBlobModel()
                {
                    FileName = fileName,
                    FileSize = blob.Properties.Length,
                    Stream = stream,
                    ContentType = blob.Properties.ContentType,
                    StreamBase64 = Convert.ToBase64String(ms.ToArray())
                };

                return result;
            }
        }
        catch(Exception ex)
        {
            await _log.CreateLogEntryAsync("exception thrown: " + ex.ToString());
        }

        await _log.CreateLogEntryAsync("returning null");

        // Otherwise
        return null;
    }
我目前正在努力将HTTP请求的结果转换为base64字符串

根据我的理解,现在您可以从Azure存储下载blob。 根据您提到的,WebApi返回AzureBlobModel。 我们可以使用C代码后端轻松地将流转换为base64字符串。如果可行,请在AzureBlobModel中返回此值

MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
string strBase64 = Convert.ToBase64String(ms.ToArray());