Изображение BLOB-объекта Azure отображается неправильно - PullRequest
0 голосов
/ 14 марта 2019

Я получаю данные изображения в виде строки в кодировке 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;
            }

это показывает вот так

screenshot

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я нашел решение

Я преобразовал входящую строку (данные изображения 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;
}
0 голосов
/ 14 марта 2019

FileMode.Create указывает, что операционная система должна создать новый файл. Если файл уже существует, он будет перезаписан. Для более подробной информации, вы можете обратиться к этой статье .

Если размер вашего блоба равен 0 B. Поэтому вы не всегда можете найти файл и открыть его. FileMode указывает, как операционная система должна открывать файл. Можно удалить его и использовать OpenRead, чтобы открыть существующий файл для чтения. Вы можете сослаться на код, как показано ниже:

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

Для получения дополнительной информации вы можете обратиться к предложениям, упомянутым в этой теме SO , и Невозможно просмотреть загрузку изображений в хранилище BLOB-объектов Azure

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь по этому вопросу.

...