使用带有分页的java在GCS中列出BLOB会得到相同的BLOB页面
我试图使用JavaAPI列出大量的gcs blob。由于blob的数量很大,我尝试使用分页。我反复看到同一页。代码是这样的使用带有分页的java在GCS中列出BLOB会得到相同的BLOB页面,java,google-cloud-platform,google-cloud-storage,Java,Google Cloud Platform,Google Cloud Storage,我试图使用JavaAPI列出大量的gcs blob。由于blob的数量很大,我尝试使用分页。我反复看到同一页。代码是这样的 Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService(); Page<Blob> allBlobs = storage.list(myBucketName,Storage.BlobListOption.pageSize(5000)
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
Page<Blob> allBlobs = storage.list(myBucketName,Storage.BlobListOption.pageSize(5000), Storage.BlobListOption.prefix("some prefix");
while (allBlobs.hasNextPage()) {
Page<Blob> page = allBlobs.getNextPage();
for (Blob blob : page.getValues()) {
.... do something....
}
}
Storage Storage=StorageOptions.newBuilder().setCredentials(credentials.build().getService();
Page allBlobs=storage.list(myBucketName、storage.BlobListOption.pageSize(5000)、storage.BlobListOption.prefix(“某些前缀”);
while(allBlobs.hasNextPage()){
Page Page=allBlobs.getNextPage();
for(Blob Blob:page.getValues()){
……做点什么。。。。
}
}
看起来我一遍又一遍地看到同一页。我查看了allBlobs.getNextPageToken()提供的令牌令牌看起来一直都是一样的。我是否错过了将页面向前移动到下一个页面的内容?getNextPage不是这样吗?页面接口只定义了这几个方法。我是否忽略了这些方法?我没有使用Java,但getNextPage()是否可能正在返回下一页,但没有迭代所有blob?因此所有blob在存储列表中的位置没有改变?如果在for循环后添加一行“allBlobs=page”,会发生什么情况?请改用
iterateAll
方法。请参见示例(复制此处以完成):
Page blobs=
存储列表(
bucketName,BlobListOption.currentDirectory(),
前缀(目录));
for(Blob Blob:blobs.iterateAll()){
//对这个斑点做点什么
}
感谢您的反馈。我之所以研究这个问题,是因为列出大量文件花费了太长的时间。即使分页工作正常,也会花费太长的时间。因此,我最终使用了一些不同的前缀,并逐块列出,然后处理它们
Page<Blob> blobs =
storage.list(
bucketName, BlobListOption.currentDirectory(),
BlobListOption.prefix(directory));
for (Blob blob : blobs.iterateAll()) {
// do something with the blob
}