为 Amazon S3 对象命名
对象键(或键名称)唯一标识 Amazon S3 存储桶中的对象。创建对象时,需要指定键名称。例如,在 Amazon S3 控制台
对象键名称是 Unicode 字符序列,它采用 UTF-8 编码,长度最大为 1,024 字节。对象键名称区分大小写。下一节将提供有关对象键名称的限制以及有关选择键名称的准则。
选择对象键名称
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 或 REST API。
此外,请注意以下前缀限制:
-
对于前缀为“./”的对象,必须使用 Amazon Command Line Interface (Amazon CLI)、Amazon SDK 或 REST API 上传或下载。您不能使用 Amazon S3 控制台。
-
对于前缀为“../”的对象,不能使用 Amazon Command Line Interface (Amazon CLI) 或 Amazon S3 控制台上传。
可能需要特殊处理的字符
键名中的以下字符可能需要另外进行代码处理,并且可能需要以十六进制形式在 URL 中编码或引用。其中部分字符是不可打印的字符,浏览器可能无法处理它们,这也需要特殊处理:
-
表示和的符号 (“&”)
-
美元 (“$”)
-
ASCII 字符范围 00–1F 十六进制 (0–31 十进制) 和 7F (127 十进制)
-
“At”符号 (“@”)
-
等于 (“=”)
-
分号 (“;”)
-
正斜杠 ("/")
-
冒号 (“:”)
-
加号 (“+”)
-
空格 – 大量连续空格可能会在某些使用情形中丢失(特别是多个空格)
-
逗号 (“,”)
-
问号 (“?”)
要避免的字符
我们建议不要在键名中使用以下字符,因为这些字符需要进行大量特殊的字符处理,才能在所有应用程序间保持一致性。
-
反斜杠(“\”)
-
左大括号 (“{”)
-
不可打印的 ASCII 字符 (128–255 十进制字符)
-
插入符号 (“^”)
-
右大括号 (“}”)
-
百分比字符 (“%”)
-
重音符/反勾号 (“`”)
-
右方括号 (“]”)
-
引号
-
“大于”符号 (“>”)
-
左方括号 (“[”)
-
波浪字符 (“~”)
-
“小于”符号(“<”)
-
“井号”字符 (“#”)
-
竖线 (“|”)
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>