如何解决在 Google Cloud Storage 上的目录中列出 Blob 会返回错误的结果
我想像这样列出 Google Cloud Storage 目录中的所有 blob:
public List<Blob> getFiles(String bucketName,String path) {
final Storage storage = storagesupplier.get();
final Page<Blob> blobs =
storage.list(
bucketName,BlobListOption.currentDirectory(),BlobListOption.prefix((path.endsWith("/") ? path : (path + "/"))));
final Iterator<Blob> blobIterator = blobs.iterateall().iterator();
final List<Blob> files = new ArrayList<>();
while (blobIterator.hasNext()) {
Blob blob = blobIterator.next();
System.out.println(blob.getName() + ",isDirectory: " + blob.isDirectory());
if (!blob.isDirectory()) {
files.add(blob);
}
}
return files;
}
在我的存储桶中,我有一个名为 input
的目录,我正在使用我的存储桶名称和路径 = input/
调用上述方法。
在日志中我得到:
input/,isDirectory: false
input/1.json,isDirectory: false
input/2.json,isDirectory: false
input/3.json,isDirectory: false
我发现有两个问题:
input
目录在列表中。这我可以理解,因为它还包含 prefix
方法调用中的 list(...)
集。
但我的问题是:为什么 isDirectory()
对于 input
blob 返回 false,因为它显然是一个目录?
isDirectory()
方法的文档保留:
如果当前 blob 代表一个目录,则返回 true。仅当使用 Storage.BlobListOption.currentDirectory() 选项时 Storage.list(String,Storage.BlobListOption) 返回 blob 时才会发生这种情况。 [...]
我的 Google Cloud Storage 客户端的版本:
com.google.cloud:google-cloud-storage:1.113.9
解决方法
我已经answered a similar question.
TL;DR:在没有目录的平台上查找目录是一个很大的错误!
IMO,这是 Java 客户端库开发人员犯的错误。
所以,不要依赖目录指示符。了解底层平台并明智地使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。