연습 - Blob 참조 가져오기
Blob Storage의 컨테이너와 상호 작용하려면 BlobContainerClient
개체를 사용합니다. 마지막 단원에서 본 것처럼 컨테이너를 만드는 것 외에도 BlobContainerClient
개체를 사용하여 컨테이너의 Blob을 나열할 수 있습니다.
컨테이너 Blob 나열
BlobContainerClient
의 GetBlobsAsync
메서드를 사용하여 컨테이너의 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
}
listBlobs
의 BlobContainerClient
메서드를 사용하여 컨테이너의 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로 변환합니다. 클라이언트에 반환된 경우 이름은 페이지에서 하이퍼링크로 렌더링됩니다.
편집기를 사용하여 listNames
의 BlobStorage.java
를 다음 코드로 바꾼 후 변경 내용을 저장합니다.
public List<String> listNames() {
return blobContainerClient.listBlobs()
.stream()
.map(BlobItem::getName)
.collect(Collectors.toList());
}
IndexBean
및 index.xhmtl
이(가) 이 메서드에서 반환한 이름을 페이지에서 하이퍼링크로 렌더링되도록 처리합니다.