Azure Blob 存储 Java SDK 12 从 blob 名称中提取文件名

Azure Blob Storage Java SDK 12 extract file name from blob name

假设我有这样的 blob 结构:

dir0
├── dir1
│ ├── file11
│ └── file12
├── dir2
└── dir3

在使用 listBlobsByHierarchy("dir0/dir1/") 方法列出包含两个文件 file11file12dir1 之后,我用 blobName [=50 得到两个 blob =] 设置为 dir0/dir1/file11dir0/dir1/file12,因此 <virtual_path>/<file_name>。没关系,但在某些时候我需要得到 <file_name> 部分。

我的问题是:Java 的 Azure 存储 SDK 12 是否提供了从 blob 名称中获取 <file_name> 部分的机制? 我可以自己做但很难相信 SDK 不提供此功能......也许你们知道不同的优雅方式来做到这一点?你平时是怎么处理这些事情的?

SDK 似乎不支持构建前缀或从 blob 名称获取文件名,这对我来说有点奇怪 :P 我希望 fileName 字段 BlobItem class 或 buildPrefix(List<String> segments) 用'/'连接路径段的方法。

你只需要做:

blobName.replaceFirst("^/dir0/dir1/", "")

blob 存储中的目录不是真实的,结构是扁平的,只有一些辅助方法考虑了前缀。有关详细信息,请参阅 this explanation

您始终可以启用 hierarchical namespace (aka. Datalake Storage) in your blob account. This makes blob containers more like traditional filesystem with real directories. You are using a different SDK then (->docs). And its DirectoryEntry 对象区分 name(无路径)和 fullName(有路径)。