首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载Azure blob并将其设置为图像标记上的数据url

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

Stack Overflow用户
提问于 2017-03-15 03:50:07
回答 1查看 3.5K关注 0票数 1

我正在尝试从私有Azure blob存储容器下载Blob并将其显示在图像标记中。

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

Getting 403 error when trying to retrieve an Azure blob on Web API request

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

我创建了这个js小提琴,它包含从HTTP请求接收到的数据(图像),以及我试图将数据转换为base64字符串的尝试:

代码语言:javascript
复制
'http://jsfiddle.net/chesco9/6a7ohgho/'

编辑

谢谢汤姆的帮助。我实现了你的解决方案,结果成功了。我在这个问题上已经被困了几天了。

代码语言:javascript
复制
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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-15 08:03:56

目前,我很难将来自HTTP请求的结果转换为一个base64字符串。

根据我的理解,现在您可以从Azure存储下载blob。根据您提到的link,WebApi返回AzureBlobModel。我们可以使用base64代码轻松地将流转换为C#字符串,backend.You可以在代码中添加以下代码。如果它是可修复的,则在AzureBlobModel中返回此值。

代码语言:javascript
复制
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
string strBase64 = Convert.ToBase64String(ms.ToArray());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42800783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档