【问题标题】:Azure blob image not displaying properlyAzure blob 图像未正确显示
【发布时间】:2019-03-19 15:40:33
【问题描述】:

我收到的图像数据是 base 64 编码字符串,我需要显示图像的内容而不将其下载到服务器。

在浏览器中访问 URL 时,我的图像无法正常显示

代码

public async static Task<dynamic> UploadImageToStorage(string imageData)
        {
            CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(BlobStorageConnectionString);
            try
            {
                CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
                CloudBlobContainer container = blobClient.GetContainerReference(BlobStorageContainer);
                if (await container.CreateIfNotExistsAsync())
                {

                    await container.SetPermissionsAsync(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

                }
                string blobID= Guid.NewGuid().ToString();
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobID);
                blockBlob.Properties.ContentType = "image/jpeg";
                await blockBlob.UploadTextAsync(imageData);

                return blockBlob.Uri.AbsoluteUri;
                //return blobID;
            }

它是这样显示的

【问题讨论】:

  • 为什么要将图像数据作为文本上传?
  • 编辑了我的问题
  • 请编辑您的问题并包括 imageData 的样子。
  • @GauravMantri 它是问题中所述的base64值
  • 我之所以要求查看实际值是因为您需要将该 base64 编码字符串转换为字节数组。该值将决定在转换之前是否需要解析。

标签: azure azure-storage


【解决方案1】:

FileMode.Create 指定操作系统应该创建一个新文件。如果文件已经存在,它将被覆盖。更多详情可以参考这个article。

如果您的 blob 大小为 0 B。因此,您将始终找不到文件并打开它。 FileMode 指定操作系统应如何打开文件。可以将其删除并使用 OpenRead 打开现有文件进行读取。您可以参考以下代码:

using (var f = System.IO.File.OpenRead(model.FileToUpload.FileName))
            {
                await blockBlob.UploadFromStreamAsync(f);
            }

有关更多信息,您可以参考此SO 线程中提到的建议和 Cannot view image upload to azure blob storage

如果您在这个问题上需要进一步的帮助,请告诉我。

【讨论】:

  • 我将 base 64 编码图像作为函数的输入。编辑了问题
【解决方案2】:

我找到了解决办法

我将传入的字符串(base 64 图像数据)转换为字节数组并存储在内存流中并上传到 blob。

try
{
    CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference(BlobStorageContainer);
    if (await container.CreateIfNotExistsAsync())
    {
        await container.SetPermissionsAsync(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
    }
    string blobID= Guid.NewGuid().ToString();
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobID);
    blockBlob.Properties.ContentType = "image/jpeg";
    byte[] imageBytes = Convert.FromBase64String(imageData);
    MemoryStream memStream = new MemoryStream(imageBytes);
    await blockBlob.UploadFromStreamAsync(memStream);

    return blockBlob.Uri.AbsoluteUri;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多