Упражнение. Получение ссылок на BLOB-объекты
Для взаимодействия с контейнером в службе хранилища больших двоичных объектов используется объект BlobContainerClient
. Помимо создания контейнеров, как вы видели в последнем уроке, объект BlobContainerClient
можно также использовать для перечисления больших двоичных объектов в контейнере.
Перечисление BLOB-объектов в контейнере
Получите список больших двоичных объектов в контейнере с помощью BlobContainerClient
GetBlobsAsync
метода. За кулисами клиент выполняет один или несколько вызовов 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
BlobStorage.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
обработайте имена, возвращаемые этим методом, в виде гиперссылок на странице.