Ćwiczenie — pobieranie odwołań do obiektu blob

Ukończone

Aby wchodzić w interakcje z kontenerem BlobContainerClient w usłudze Blob Storage, użyj obiektu . Oprócz tworzenia kontenerów, jak pokazano w ostatniej lekcji, BlobContainerClient obiekt może być również używany do wyświetlania listy obiektów blob w kontenerze.

Wyświetlanie listy obiektów blob w kontenerze

Pobierz listę obiektów blob w kontenerze przy użyciu BlobContainerClientmetody .s GetBlobsAsync . W tle klient wykonuje co najmniej jedno wywołanie HTTP na platformie Azure, aby wyświetlić listę wszystkich obiektów blob w kontenerze. Ponieważ ta metoda jest asynchroniczna, należy uzyskać await wyniki podczas ich odczytywania. Mogą nie być zwracane w jednym wywołaniu HTTP. Poniższy kod przedstawia standardowy wzorzec odczytywania wyników za pomocą foreach pętli.

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

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

Listę obiektów blob w kontenerze można uzyskać przy użyciu listBlobs metody w BlobContainerClientpliku . W tle klient wykonuje co najmniej jedno wywołanie HTTP na platformie Azure, aby wyświetlić listę wszystkich obiektów blob w kontenerze. Ta metoda zwraca PagedIterable<BlobItem> element implementujący Iterable<BlobItem>element . Następnie możesz odczytać jeden element naraz lub według strony elementów. Poniższy kod przedstawia standardowy wzorzec odczytywania wyników za pomocą for pętli.

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

Ćwiczenie

Jedna z funkcji w aplikacji wymaga pobrania listy obiektów blob z interfejsu API. Użyj wzorca pokazanego wcześniej, aby wyświetlić listę wszystkich obiektów blob w naszym kontenerze. Podczas przetwarzania listy uzyskasz nazwy poszczególnych obiektów blob.

Za pomocą edytora zastąp ciąg GetNames w pliku BlobStorage.cs następującym kodem i zapisz zmiany.

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

Przetwarza FilesController nazwy, które ta metoda zwraca, aby przekształcić nazwy w adresy URL. Po powrocie do klienta nazwy są renderowane jako hiperlinki na stronie.

Za pomocą edytora zastąp metodę listNames w pliku BlobStorage.java poniższym kodem i zapisz wprowadzone zmiany.

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

IndexBean i index.xhmtl przetwarzaj nazwy zwracane przez tę metodę, które mają być renderowane jako hiperlinki na stronie.