Упражнение. Получение ссылок на BLOB-объекты

Завершено

Для взаимодействия с контейнером в службе хранилища больших двоичных объектов используется объект BlobContainerClient. Помимо создания контейнеров, как вы видели в последнем уроке, объект BlobContainerClient можно также использовать для перечисления больших двоичных объектов в контейнере.

Перечисление BLOB-объектов в контейнере

Получите список больших двоичных объектов в контейнере с помощью BlobContainerClientGetBlobsAsync метода. За кулисами клиент выполняет один или несколько вызовов HTTP в Azure, чтобы перечислить все большие двоичные объекты в контейнере. Так как этот метод является асинхронным, необходимо получить await результаты при их чтении. Они могут быть возвращены не во время одного HTTP-вызова. В следующем коде показан стандартный шаблон для чтения результатов с циклом foreach .

AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();

await foreach (var blob in blobs)
{
    // Read the BlobItem and work with it here
}

Список BLOB-объектов в контейнере можно получить с помощью метода listBlobs в BlobContainerClient. За кулисами клиент выполняет один или несколько вызовов HTTP в Azure, чтобы перечислить все большие двоичные объекты в контейнере. Этот метод возвращает объект PagedIterable<BlobItem>, который реализует Iterable<BlobItem>. Затем можно прочитать его по одному элементу за раз или по страницам элементов. В следующем коде показан стандартный шаблон для чтения результатов с циклом for .

for (BlobItem blob : blobContainerClient.listBlobs()) {
    // Read the BlobItem and work with it here
}
blobContainerClient.listBlobs()
    .stream()
    .map(blobItem -> /* Read the BlobItem and work with it here */)
    .collect(Collectors.toList());

Упражнения

Одной из функций в вашем приложении требуется получение списка BLOB-объектов из API. Используйте шаблон, показанный ранее, чтобы перечислить все большие двоичные объекты в нашем контейнере. Обработав список, вы получите имя каждого большого двоичного объекта.

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

public async Task<IEnumerable<string>> GetNames()
{
    List<string> names = new List<string>();

    BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);

    // Get the container the blobs are saved in
    BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);

    // This gets the info about the blobs in the container
    AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();

    await foreach (var blob in blobs)
    {
        names.Add(blob.Name);
    }
    return names;
}

Обрабатывает FilesController имена, возвращаемые этим методом, чтобы превратить имена в URL-адреса. После возвращения клиенту они отображаются на странице как гиперссылки.

Используя редактор, замените listNames в BlobStorage.java на следующий код и сохраните изменения.

public List<String> listNames() {
    return blobContainerClient.listBlobs()
      .stream()
      .map(BlobItem::getName)
      .collect(Collectors.toList());
}

IndexBean и index.xhmtl обработайте имена, возвращаемые этим методом, в виде гиперссылок на странице.