创建对象键名称 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建对象键名称

对象键(或键名称)唯一标识 Amazon S3 存储桶中的对象。对象元数据是一组名称值对。有关对象元数据的更多信息,请参阅 使用对象元数据

创建对象时,要指定键名,它在存储桶中唯一地标识该对象。例如,在 Amazon S3 控制台上,在突出显示存储桶时,将显示存储桶中的对象的列表。这些名称是对象键。对象键名称是 Unicode 字符序列,它采用 UTF-8 编码,长度最大为 1,024 字节。对象键名称区分大小写。

注意

对于虚拟托管类型请求,不支持值为“soap”的对象键名称。对于使用“soap”的对象键名称值,必须改用路径类型 URL

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
  • 0-9

  • a-z

  • A-Z

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 文本都被规范化,这样单个回车符(ASCII 代码 13)和回车符紧跟换行符(ASCII 代码 10)将替换为单个换行符。为了确保正确解析 XML 请求中的对象键,当将回车符和其他特殊字符插入 XML 标签时,必须使用等效的 XML 实体代码替换回车符和其他特殊字符。以下是此类特殊字符及其等效实体代码的列表:

  • ' 用作 &apos;

  • ” 用作 &quot;

  • & 用作 &amp;

  • < 用作 &lt;

  • > 用作 &gt;

  • \r 用作 &#13;&#x0D;

  • \n 用作 &#10;&#x0A;

以下示例说明了使用 XML 实体代码替换回车的情况。此 DeleteObjects 请求将删除带有 key 参数的对象:/some/prefix/objectwith\rcarriagereturn(其中 \r 是回车)。

<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Object> <Key>/some/prefix/objectwith&#13;carriagereturn</Key> </Object> </Delete>