Cvičení – získání odkazů na objekty blob

Dokončeno

Pokud chcete pracovat s kontejnerem ve službě Blob Storage, použijte BlobContainerClient objekt. Kromě vytváření kontejnerů, jak jste viděli v poslední lekci, BlobContainerClient můžete objekt použít také k výpisu objektů blob v kontejneru.

Výpis objektů blob v kontejneru

Pomocí metody získejte seznam objektů blob v kontejneruBlobContainerClientGetBlobsAsync. Klient na pozadí provede jedno nebo více volání HTTP do Azure k výpisu všech objektů blob v kontejneru. Vzhledem k tomu, že tato metoda je asynchronní, potřebujete výsledky await při jejich čtení. Nemusí se všechny vrátit v jednom volání HTTP. Následující kód ukazuje standardní vzor pro čtení výsledků smyčkou foreach .

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

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

Pomocí metody v BlobContainerClientkontejneru můžete získat seznam objektů blob v kontejnerulistBlobs. Klient na pozadí provede jedno nebo více volání HTTP do Azure k výpisu všech objektů blob v kontejneru. Tato metoda vrátí PagedIterable<BlobItem> , která implementuje Iterable<BlobItem>. Pak si ji můžete přečíst po jedné položce nebo podle stránky položek. Následující kód ukazuje standardní vzor pro čtení výsledků smyčkou 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());

Cvičení

Jedna z funkcí vaší aplikace vyžaduje získání seznamu objektů blob z rozhraní API. Pomocí dříve zobrazeného vzoru zobrazte seznam všech objektů blob v našem kontejneru. Při zpracování seznamu získáte název každého objektu blob.

V editoru nahraďte GetNames v BlobStorage.cs následujícím kódem a uložte změny.

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;
}

Zpracuje FilesController názvy, které tato metoda vrátí, aby se názvy přeměňily na adresy URL. Po návratu do klienta se názvy vykreslují jako hypertextové odkazy na stránce.

V editoru nahraďte listNames v BlobStorage.java následujícím kódem a změny uložte.

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

IndexBean a index.xhmtl zpracovat názvy vrácené touto metodou, aby se vykreslovaly jako hypertextové odkazy na stránce.