猿问

从 Azure Blob 存储下载 blob 列表

我创建了CloudBlobContainer正确的连接字符串:


@Bean

@SneakyThrows

public CloudBlobContainer blobContainer(CloudStorageAccount cloudStorageAccount) {

    return cloudStorageAccount

            .createCloudBlobClient()

            .getContainerReference(containerName);

}

我看到使用的 blob 列表blobContainer.listBlobs()


目前,我正在寻找从特定文件夹下载列表 blob 的最有效方法。


牛魔王的故事
浏览 193回答 3
3回答

慕桂英4014372

listBlobs()方法有一个overload接受prefix参数。public Iterable<ListBlobItem> listBlobs(final String prefix, final boolean useFlatBlobListing) {         return this.listBlobs(prefix, useFlatBlobListing, EnumSet.noneOf(BlobListingDetails.class), null, null);     }您需要传递path of the folderasprefix和传递truefor useFlatBlobListing,这将列出该虚拟文件夹中的所有 blob。获得该 blob 列表后,您可以使用downloadToFile每个 blob 上的方法下载 blob。

杨__羊羊

一段时间后,我发现我可以应用CloudBlockBlob类型ListBlobItem和下载方法。@Bean@SneakyThrowspublic CommandLineRunner commandLineRunner(CloudBlobContainer blobContainer) {&nbsp; &nbsp; return args -> {&nbsp; &nbsp; &nbsp; &nbsp; Sets.newConcurrentHashSet(blobContainer.listBlobs("documents/"))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(it -> it.getUri().toString().contains("pdf"))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .forEach(it -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((CloudBlockBlob) it).downloadToFile(((CloudBlockBlob) it).getName());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; };}

互换的青春

你可以通过两种方式做到这一点(i) AZcopy-AzCopy /Source:https://myaccount.file.core.windows.net/demo/ /Dest:C:\myfolder /SourceKey:key /S(ii) 通过Azure Cli——# Create a directory to store all the blobsmkdir /downloaded-container && cd /downloaded-container# Get all the blobsBLOBS=$(az storage blob list -c $CONTAINER \    --account-name $ACCOUNT_NAME --sas-token "$SAS_TOKEN" \    --query [*].name --output tsv)# Download each onefor BLOB in $BLOBSdo  echo "********Downloading $BLOB"  az storage blob download -n $BLOB -f $BLOB -c $CONTAINER --account-name $ACCOUNT_NAME --sas-token "$SAS_TOKEN"done如果您只想通过代码,这里有一个,sample repo因为没有直接的方法可以通过 SDK 完成。HttpGet httpGet = new HttpGet(urlString);            signRequest(httpGet, resourcePath, account, hashFunction);            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {                System.out.println(response.getStatusLine());
随时随地看视频慕课网APP

相关分类

Java
我要回答