管理文件夹概述
OBS凭借其底层的扁平化架构,在处理海量数据时具备优良的扩展性。但当桶内存放了大量文件时,所有对象都平铺在同一个界面中,会使您的查找、批量操作变得繁琐,业务数据的归类也会缺乏清晰的逻辑边界。为了解决这一问题,OBS在控制台、OBS Browser+等可视化工具中提供了“文件夹”视图功能。
工作原理
OBS本质上是采用扁平化的存储结构,即数据以对象的形式存储在桶内,桶内所有对象均处于平等的同一逻辑层级,彼此之间不存在上下级的从属关系,没有真正的文件夹。控制台、OBS Browser+展示的文件夹是OBS依据文件名中的“/”分隔符自动生成的。
如图1所示,OBS控制台和OBS Browser+对文件夹的处理逻辑如下:
- 按照“/”分隔:如果您有名为Dir1/Dir2/test1.txt的对象,则控制台会显示名为Dir1的文件夹,其中包含文件夹Dir2。文件夹Dir2包含对象test1.txt。此外,使用正斜杠字符 (/) 为结尾命名的对象都将显示为控制台中的文件夹。例如,名为Dir1/Dir2/的对象在控制台中显示为文件夹,而不显示为对象。
- 新建不包含对象的纯文件夹,文件夹大小是0Byte:在OBS控制台中创建文件夹时,将创建一个大小为0字节的对象。此对象名为您提供的文件夹名称加上“/”。例如,创建一个名为Dir的文件夹,控制台将使用“Dir/”为对象名创建一个0字节的对象。
- 相同前缀对象会被自动归拢到一个文件夹:以相同的形如“xxx/”格式为前缀的对象,会被归拢到一个文件夹中。例如,log/log1.txt和log/log2.txt会被归拢到log文件夹中,Dir1/Dir2/test1.txt和Dir1/Dir2/test2.txt会被归拢到Dir1下的子文件夹Dir2中。
文件夹相关操作
| 操作 | 说明 |
|---|---|
| 在桶中新建一个文件夹,从而更方便地分类和管理存储在OBS中的数据。 当您不需要文件夹及文件夹内的对象时,可以删除文件夹。 | |
| 使用文件夹分享功能,将OBS中的整个文件夹分享给匿名用户。 | |
| 统计文件夹的大小,以及文件夹包含对象的数量。 |
文件夹使用最佳实践
- 基于前缀匹配为目录配置访问权限:如果要为桶exampleBucket中名为Dir的目录设置访问权限,IAM策略和桶策略的Resource字段设置如下,注意需要搭配通配符“*”为文件夹中的所有对象配置访问权限,不要错误设置为单独为“Dir/”这个0字节对象配置访问权限:
- 桶策略:以下示例为指定用户授予exampleBucket桶中Dir目录下所有对象的下载权限。
{ "Statement": [ { "Sid": "DirTest", "Effect": "Allow", "Principal": { "ID": [ "domain/exampleDomainID:user/exampleUserID" ] }, "Action": [ "GetObject" ], "Resource": [ "exampleBucket/Dir/*" ] } ] } - IAM策略:以下示例为授予exampleBucket桶中Dir目录下所有对象的下载权限
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject" ], "Resource": [ "OBS:*:*:object:exampleBucket/Dir/*" ] } ] }
- 桶策略:以下示例为指定用户授予exampleBucket桶中Dir目录下所有对象的下载权限。
- 避免过深的文件夹嵌套结构(如 Dir1/Dir2/Dir3/Dir4/.../test.txt),因为列举对象时前缀过滤逻辑会影响性能。
