Загрузка хранилища BLOB-объектов Azure в поток, возвращающий «» asp.net

2

В настоящее время я пытаюсь загрузить файл из хранилища Azure blob с помощью метода DownloadToStream для загрузки содержимого blob в виде текстовой строки. Однако я ничего не получаю, кроме пустой строки.

Вот мой код, который я использую для подключения к контейнеру azure blob и извлечения файла blob.

    public static string DownLoadFroalaImageAsString(string blobStorageName, string companyID)
    {
        // Retrieve storage account from connection string.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
            CloudConfigurationManager.GetSetting("StorageConnectionString"));

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference(companyID.ToLower());

        //retrieving the actual filename of the blob
        string removeString = "BLOB/";
        string trimmedString = blobStorageName.Remove(blobStorageName.IndexOf(removeString), removeString.Length);

        // Retrieve reference to a blob named "trimmedString"
        CloudBlockBlob blockBlob2 = container.GetBlockBlobReference(trimmedString);

        string text;
        using (var memoryStream = new MemoryStream())
        {
            blockBlob2.DownloadToStream(memoryStream);
            text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
        }
        return text;
    }

Я следил за этой документацией, но я не могу заставить ее работать. Любая помощь будет принята с благодарностью.

Теги:
azure
azure-storage-blobs

2 ответа

3
Лучший ответ

Однако я ничего не получаю, кроме пустой строки.

Я тестирую ваш поставляемый код на моей стороне, он работает правильно. Я предполагаю, что содержимое тестового блоба пусто в вашем случае. Мы могли бы стрелять следующими способами:

1.please попробуйте проверить длину memoryStream. Если длина равна 0, мы могли бы знать, что содержимое blob пусто.

using (var memoryStream = new MemoryStream())
{
    blockBlob2.DownloadToStream(memoryStream);
    var length = memoryStream.Length;
    text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
 }

2. Мы могли бы загрузить blob с контентом в контейнер, мы могли бы легко это сделать с помощью Azure-портала или Microsoft Azure. И попробуйте проверить его с загруженным блобом.

  • 1
    Спасибо! У меня проблема с тем, как я загружаю файлы в контейнер для хранения больших двоичных объектов, поэтому мой код ничего не возвращает, так как файл не существует. : -S
  • 0
    @HaydenPassmore Что касается проблемы с загрузкой: позиция в исходном потоке (пере) установлена на 0? Получил меня довольно много раз.
Показать ещё 1 комментарий
0

Если вы хотите получить текст из BLOB-объекта, вы можете использовать DownloadTextAsync()

var text = await blockBlob2.DownloadTextAsync();

Если вы хотите вернуть поток файлов обратно в ответ API, вы можете использовать FileStreamResult, который является IActionResult.

var stream = await blockBlob2.OpenReadAsync();
return File(stream, blockBlob2.Properties.ContentType, "name");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню