Alıştırma - Blob başvurularını alma

Tamamlandı

Blob Depolama'da bir kapsayıcıyla etkileşim kurmak için bir BlobContainerClient nesne kullanın. Son ünitede gördüğünüz gibi kapsayıcılar oluşturmaya ek olarak, kapsayıcıdaki BlobContainerClient blobları listelemek için de bir nesne kullanılabilir.

Kapsayıcıdaki blobları listeleme

'nin GetBlobsAsync yöntemini kullanarak BlobContainerClientbir kapsayıcıdaki blobların listesini alın. Arka planda istemci, kapsayıcıdaki tüm blobları listelemek için Azure'a bir veya daha fazla HTTP çağrısı yapar. Bu yöntem zaman uyumsuz olduğundan, bunları okurken sonuçları almanız await gerekir. Bunların tümü tek bir HTTP çağrısında döndürülmeyebilir. Aşağıdaki kod, sonuçları döngüyle foreach okumak için standart deseni gösterir.

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

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

içindeki yöntemini BlobContainerClientkullanarak listBlobs kapsayıcıdaki blobların listesini alabilirsiniz. Arka planda istemci, kapsayıcıdaki tüm blobları listelemek için Azure'a bir veya daha fazla HTTP çağrısı yapar. Bu yöntem uygulayan Iterable<BlobItem>döndürürPagedIterable<BlobItem>. Ardından bir kerede bir öğeyi veya öğe sayfasını okuyabilirsiniz. Aşağıdaki kod, sonuçları döngüyle for okumak için standart deseni gösterir.

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());

Alıştırma

Uygulamanızdaki özelliklerden biri, API’den blobların listesini almayı gerektiriyor. Kapsayıcımızdaki tüm blobları listelemek için daha önce gösterilen deseni kullanın. Listeyi işledikçe, her blobun adını alıyorsunuz.

Düzenleyiciyi kullanarak Blob Depolama.cs dosyasını aşağıdaki kodla değiştirin GetNamesve değişikliklerinizi kaydedin.

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 bu yöntemin döndürdüğü adları işliyor ve adları URL'lere dönüştürüyor. İstemciye geri döndüğünüzde, adlar sayfada köprü olarak işlenir.

Düzenleyiciyi kullanarak BlobStorage.java dosyasındaki listNames bölümünü aşağıdaki kodla değiştirin ve değişikliklerinizi kaydedin.

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

IndexBean ve index.xhmtl sayfada köprü olarak işlenmek üzere bu yöntem tarafından döndürülen adları işleyin.