Azure Blob容器listBlob用于获取Java中具有特定扩展名的文件

时间:2019-04-08 08:38:07

标签: azure azure-blob-storage azure-java-sdk

我有一个Java代码,其中列出了blob并在for循环中进行过滤,以仅提取具有特定扩展名的文件。有没有一种方法可以查询/请求容器以仅返回具有特定扩展名的blob?我不想遍历容器中的所有斑点来做到这一点。

3 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以查询/请求容器以仅返回blob   具体的扩展名?

不幸的是,没有。您无法查询Blob存储以返回具有特定扩展名的Blob。

  

我不想遍历容器中的所有斑点   这个。

如果您使用的是Storage REST API,那是唯一的方法。您将需要在容器中列出blob,然后遍历这些blob,并根据客户端的扩展名(或任何其他条件)进行过滤。

可能的解决方案

一种可能的解决方案是使用Azure Search Service并在其中为您的Blob元数据建立索引。然后,您应该可以搜索特定的扩展名并获取blob列表。

答案 1 :(得分:1)

您可以使用 ListBlobsOptions() 和 setPrefix 根据前缀进行过滤,如下所示

ListBlobsOptions options=new ListBlobsOptions();
options.setPrefix("<<prefix>>");
Duration fromDays = Duration.of(10, ChronoUnit.MINUTES);
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("containerName");
for (BlobItem blobItem : containerClient.listBlobs(options,fromDays)) {
            System.out.println("\t" + blobItem.getName());
}

答案 2 :(得分:0)

这就是您所需要的

BlobContainer.ListBlobs(prefix, useFlatBlobListing: true, blobListingDetails: BlobListingDetails.None)
.OfType<CloudBlockBlob>()
.Where(x=> x.Name.EndsWith(".json"));

prefix只是搜索的部分路径。 结果是IEnumerable<CloudBlockBlob>