为 Amazon S3 对象命名
对象键(或键名称)唯一标识 Amazon S3 存储桶中的对象。创建对象时,需要指定键名称。例如,在 Amazon S3 控制台
对象键名称由以 UTF-8 编码的 Unicode 字符序列组成,最大长度为 1024 字节或大约 1024 个拉丁字符。在某些区域设置中,单个字符可能需要 2 个字节进行编码。命名对象时,请注意以下几点:
选择对象键名称
Amazon S3 数据模型是一种扁平结构:您创建一个存储桶,存储桶存储对象。不存在子存储桶或子文件夹的层次结构。但您可以使用键名前缀和分隔符推断逻辑层次结构(如同 Amazon S3 控制台一样)。Amazon S3 控制台支持文件夹的概念。有关如何从 Amazon S3 控制台编辑元数据的更多信息,请参阅在 Amazon S3 控制台中编辑对象元数据。
假设您的存储桶(admin-created)包含具有以下对象键的四个对象:
Development/Projects.xls
Finance/statement1.pdf
Private/taxdocument.pdf
s3-dg.pdf
控制台使用键名称前缀(Development/、Finance/ 和 Private/)和分隔符 (/) 来呈现文件夹结构。s3-dg.pdf 键不包含斜线分隔的前缀,因此其对象直接在存储桶的根级别出现。如果您打开 Development/ 文件夹,可以看到 Projects.xlsx 对象。
Amazon S3 支持存储桶和对象且没有层次结构。但是,通过在对象键名中使用前缀和分隔符,Amazon S3 控制台和 Amazon SDK 可以推断层次结构并引入文件夹的概念。
Amazon S3 控制台通过创建以文件夹前缀和分隔符值作为键的零字节对象来实现文件夹对象创建。这些文件夹对象不会显示在控制台中。否则,它们的行为与任何其他对象一样,可以通过 REST API、Amazon CLI 和 Amazon SDK 进行查看和操作。
对象键命名准则
您可以在对象键名中使用任意 UTF-8 字符。但是,在键名中使用某些字符可能导致一些应用程序和协议出现问题。以下指导原则有助于最大程度符合 DNS、Web 安全字符、XML 分析器和其他 API 的要求。
安全字符
以下字符集通常可安全地用于键名称:
| Alphanumeric characters |
|
| Special characters |
|
以下是有效对象键名的示例:
-
4my-organization -
my.great_photos-2014/jan/myvacation.jpg -
videos/2014/birthday/video1.wmv
注意
如果使用 Amazon S3 控制台下载键名称以句点 (.) 结尾的对象,则会从下载对象的键名称末尾删除句点。要在下载的对象中保留键名称末尾的句点,必须使用 Amazon Command Line Interface(Amazon CLI)、Amazon SDK 或 Amazon S3 REST API。
此外,请注意以下前缀限制:
-
对于前缀为
./的对象,必须使用 Amazon CLI、Amazon SDK 或 REST API 上传或下载。您无法使用 Amazon S3 控制台上传这些对象。 -
如果在从左到右解析时,相对路径段的累积计数从未超过遇到的非相对路径元素的数量,则包含相对路径元素(例如
../)的对象键是有效的。此规则适用于使用 Amazon S3 控制台、Amazon S3 REST API、Amazon CLI 和 Amazon SDK 发出的所有请求。例如:
videos/2014/../../video1.wmv有效。videos/../../video1.wmv无效。videos/../../2014/video1.wmv无效。
可能需要特殊处理的字符
键名称中的以下字符可能需要另外进行代码处理,并且很可能需要以十六进制形式在 URL 中编码或引用。其中部分字符是不可打印的字符,浏览器可能无法处理它们,这也需要特殊处理:
-
与符号 (
&) -
美元符号 (
$) -
ASCII 字符范围 00–1F 十六进制(0–31 十进制)和 7F(127 十进制)
-
@ 符号 (
@) -
等号 (
=) -
分号 (
;) -
正斜杠 (
/) -
冒号 (
:) -
加号 (
+) -
空格:大量连续空格可能会在某些情况下丢失(特别是多个空格)
-
逗号 (
,) -
问号 (
?)
要避免的字符
我们建议不要在键名称中使用以下字符,因为特殊字符的处理方式差异显著,且并非所有应用程序都保持一致:
-
反斜杠 (
\) -
左花括号 (
{) -
不可打印的 ASCII 字符(128–255 十进制字符)
-
脱字符或音调符号 (
^) -
右花括号 (
}) -
百分比字符 (
%) -
重音符/反勾号 (
`) -
右方括号 (
]) -
引号 (
") -
大于号 (
>) -
左方括号 (
[) -
波浪字符 (
~) -
小于号 (
<) -
英镑符号 (
#) -
竖线或管道符 (
|)
XML 相关的对象键约束
正如关于尾行处理的 XML 标准
以下是此类特殊字符及其等效 XML 实体代码的列表:
撇号 (
') 必须替换为'引号 (
") 必须替换为"与符号 (
&) 必须替换为&小于号 (
<) 必须替换为<大于号 (
>) 必须替换为>回车符 (
\r) 必须替换为 或
换行符 (
\n) 必须替换为 或

以下示例说明了使用 XML 实体代码替换回车的情况。此 DeleteObjects 请求将删除带有 key 参数 /some/prefix/objectwith\rcarriagereturn 的对象:(其中 \r 是回车符)。
<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Object> <Key>/some/prefix/objectwith carriagereturn</Key> </Object> </Delete>
对象键排序顺序
Amazon S3 根据对象键(包括前缀)的 UTF-8 编码字节值按字典顺序对它们进行排序。
ASCII 字符按以下顺序排序:
-
特殊字符(例如
!或/) -
大写字母 (A–Z)
-
小写字母 (a–z)
非 ASCII 字符(例如 é、中 文)编码为多字节 UTF-8 序列,通常会按照 ASCII 字符进行排序,因为它们的字节值较高(例如,0xC3 表示 é,0xE4 表示“中”)。
例如,诸如 apple/、Apple/、éclair/、中 文/ 等前缀的排序方式为:
1. Apple/(开头为 0x41)
2. apple/(开头为 0x61)
3. éclair/(开头为 0xC3 0xA9)
4. 中 文/(开头为 0xE4 0xB8 0xAD 0xE6 0x96 0x87)