URL BLOB-объектов в Azure со структурой каталогов - PullRequest
1 голос
/ 11 февраля 2020

Используемая сборка : сборка Microsoft. WindowsAzure .Storage, версия = 9.3.1.0

Что я хочу сделать : В моем Azure хранилище, изображения хранятся в виде большого двоичного объекта следующим образом:

enter image description here

Я хочу получить URL-адреса всех больших двоичных объектов изображений с их последней измененной отметкой времени.

Обратите внимание, что Image1 и Image4 могут иметь одно и то же имя.

То, что я пробовал :

  1. Я попытался ListBlobsSegmentedAsync(BlobContinuationToken currentToken) из root контейнера и с помощью GetDirectoryReference(string relativeAddress), но не смог получить желаемый результат.

  2. Хотя немного Не в курсе, я могу получить подробную информацию о блобе по GetBlockBlobReference(string blobName);

Что мне делать?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Метод ListBlobsSegmentedAsync имеет 2 перегрузки, содержащие аргумент useFlatBlobListing. Эти перегрузки принимают 7 или 8 аргументов, и я считаю 6 в вашем коде.

Используйте следующий код для отображения всех BLOB-объектов в контейнере.

public static async Task test()
{
    StorageCredentials storageCredentials = new StorageCredentials("xxx", "xxxxx");
    CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, true);
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference("container");
    BlobContinuationToken blobContinuationToken = null;
    var resultSegment = await container.ListBlobsSegmentedAsync(
         prefix: null,
         useFlatBlobListing: true,
         blobListingDetails: BlobListingDetails.None,
         maxResults: null,
         currentToken: blobContinuationToken,
         options: null,
         operationContext: null
     );

     // Get the value of the continuation token returned by the listing call.
     blobContinuationToken = resultSegment.ContinuationToken;
     foreach (IListBlobItem item in resultSegment.Results)
     {
          Console.WriteLine(item.Uri);
     }
}

Результат выглядит следующим образом:

enter image description here

0 голосов
/ 11 февраля 2020

Попробуйте это переопределение ListBlobsSegmentedAsync со следующими параметрами:

prefix: ""

useFlatBlobListing: true

blobListingDetails: BlobListingDetails.All

maxResults: 5000

currentToken: null or the continuation token returned

Это вернет вам список всех BLOB-объектов (включая внутренние виртуальные папки)

...