연습 - Blob 참조 가져오기

완료됨

Blob Storage의 컨테이너와 상호 작용하려면 BlobContainerClient 개체를 사용합니다. 마지막 단원에서 본 것처럼 컨테이너를 만드는 것 외에도 BlobContainerClient 개체를 사용하여 컨테이너의 Blob을 나열할 수 있습니다.

컨테이너 Blob 나열

BlobContainerClientGetBlobsAsync 메서드를 사용하여 컨테이너의 Blob 목록을 가져옵니다. 백그라운드에서 클라이언트는 컨테이너의 모든 Blob을 나열하기 위해 Azure에 대해 하나 이상의 HTTP 호출을 수행합니다. 이 메서드는 비동기이므로 읽을 때 await 결과가 필요합니다. 단일 HTTP 호출에서 모두 반환되지 않을 수도 있습니다. 다음 코드는 foreach 루프를 사용하여 결과를 읽는 표준 패턴을 보여줍니다.

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

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

listBlobsBlobContainerClient 메서드를 사용하여 컨테이너의 Blob 목록을 가져올 수 있습니다. 백그라운드에서 클라이언트는 컨테이너의 모든 Blob을 나열하기 위해 Azure에 대해 하나 이상의 HTTP 호출을 수행합니다. 이 메서드는 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());

연습

앱의 기능 중 하나가 작동하려면 API에서 Blob 목록을 가져와야 합니다. 앞서 보여준 패턴을 사용하여 컨테이너의 모든 Blob을 나열합니다. 목록을 처리할 때 각 Blob의 이름을 가져옵니다.

편집기를 사용하여 GetNames을(를) 다음 코드로 바꾼 후 변경 내용을 저장합니다.

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로 변환합니다. 클라이언트에 반환된 경우 이름은 페이지에서 하이퍼링크로 렌더링됩니다.

편집기를 사용하여 listNamesBlobStorage.java를 다음 코드로 바꾼 후 변경 내용을 저장합니다.

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

IndexBeanindex.xhmtl이(가) 이 메서드에서 반환한 이름을 페이지에서 하이퍼링크로 렌더링되도록 처리합니다.