Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有分页的java在GCS中列出BLOB会得到相同的BLOB页面_Java_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

使用带有分页的java在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)

我试图使用JavaAPI列出大量的gcs blob。由于blob的数量很大,我尝试使用分页。我反复看到同一页。代码是这样的

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
}