

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Lightsail 对象存储桶的密钥名称
<a name="understanding-bucket-object-key-names-in-amazon-lightsail"></a>

您上传到存储桶的文件将作为对象存储在 Amazon Lightsail 对象存储服务中。对象键（或键名称）唯一标识存储桶中存储的对象。本指南解释了密钥名称和密钥名称前缀的概念，它们构成了通过 Lightsail 控制台查看的存储桶的文件夹结构。有关存储桶的更多信息，请参阅[对象存储](buckets-in-amazon-lightsail.md)。

## 键名称
<a name="bucket-object-key-names"></a>

Lightsail 对象存储服务数据模型使用扁平结构，而不是像在文件系统中看到的那样使用分层结构。它不包含文件夹和子文件夹层次结构。但您可以使用键名称前缀和分隔符推断逻辑层次结构。Lightsail 控制台使用密钥名称前缀以文件夹结构显示您的对象。

假设您的存储桶包含具有以下对象键的四个对象：
+ `Development/Projects.xls`
+ `Finance/statement1.pdf`
+ `Private/taxdocument.pdf`
+ `to-dos.doc`

Lightsail 控制台使用密钥名称前缀 (`Development/``Finance/`、和`Private/`) 和分隔符 (`/`) 来呈现文件夹结构。`to-dos.doc` 键名称没有前缀，因此其对象直接在存储桶的根级别出现。如果您在 Lightsail 控制台中浏览到该`Development/`文件夹，则会看到该对象。`Projects.xls`您会在 `Finance/` 文件夹中看到 `statement1.pdf` 对象，并且会在 `Private/` 文件夹中看到 `taxdocument.pdf` 对象。

Lightsail 控制台允许通过创建以密钥名称前缀和分隔符值作为密钥名称的零字节对象来创建文件夹。这些文件夹对象不会显示在控制台中。但是，它们的行为与任何其他对象一样。您可以使用 Amazon S3 API、 AWS Command Line Interface (AWS CLI) 或来查看和操作它们 AWS SDKs。

## 对象键命名准则
<a name="object-key-naming-guidelines"></a>

您可以在对象键名中使用任意 UTF-8 字符。但是，在键名中使用某些字符可能导致一些应用程序和协议出现问题。以下准则可帮助您最大限度地遵守 DNS、Web 安全字符、XML 解析器等。 APIs

### 安全字符
<a name="w2aac59c37b7b5"></a>

以下字符集通常可安全地用于键名。
+ 字母数字字符
  + 0-9
  + a-z
  + A-Z
+ 特殊字符
  + 正斜杠 (`/`)
  + 感叹号 (`!`)
  + 连字符 (`-`)
  + 下划线 (`_`)
  + 句点 (`.`)
  + 星号 (`*`)
  + 单引号 (`'`)
  + 左括号 (`(`)
  + 右括号 (`)`)

以下是有效对象键名的示例：
+ `4my-organization`
+ `my.great_photos-2014/jan/myvacation.jpg`
+ `videos/2014/birthday/video1.wmv`

**重要**  
如果对象密钥名称以单个句点 (.) 或两个句点 (..) 结尾，则无法使用 Lightsail 控制台下载该对象。要下载密钥名称以一两个句点结尾的对象，必须使用 Amazon S3 API AWS CLI、和 AWS SDKs。有关更多信息，请参阅[下载存储桶对象](amazon-lightsail-downloading-bucket-objects.md)。

### 可能需要特殊处理的字符
<a name="asdf"></a>

键名中的以下字符可能需要另外进行代码处理，并且可能需要以十六进制形式在 URL 中编码或引用。其中部分字符是不可打印的字符，浏览器可能无法处理它们，这也需要特殊处理：
+ 表示和的符号 ("`&`")
+ 美元符号 ("`$`")
+ ASCII 字符范围 00–1F 十六进制（0–31 十进制）和 7F（127 十进制）
+ "At" 符号 ("`@`")
+ 等于号 ("`=`")
+ 分号 ("`;`")
+ 冒号 ("`:`")
+ 加号 ("`+`")
+ 空格 – 大量连续空格可能会在某些使用情形中丢失（特别是多个空格）
+ 逗号 ("`,`")
+ 问号 ("`?`")

### 要避免的字符
<a name="key-name-characters-to-avoid"></a>

避免在键名中使用以下字符，因为这些字符需要进行大量的特殊处理，才能在所有应用程序间保持一致性。
+ 反斜杠 ("`\`")
+ 左大括号 ("`{`")
+ 不可打印的 ASCII 字符（128–255 十进制字符）
+ 插入符号 ("`^`")
+ 右大括号 ("`}`")
+ 百分比字符 ("`%`")
+ 重音符/反勾号 ("```")
+ 右方括号 ("`]`")
+ 引号
+ “大于”符号 ("`>`")
+ 左方括号 ("`[`")
+ 波浪字符 ("`~`")
+ “小于”符号 ("`<`")
+ “井号”字符 ("`#`")
+ 竖线 ("`|`")

## XML 相关的对象键约束
<a name="xml-object-key-constraints"></a>

按照 [XML end-of-line 处理标准](https://www.w3.org/TR/REC-xml/#sec-line-ends)的规定，所有 XML 文本都经过标准化，因此单回车符（ASCII 代码 13）和紧接着换行符的回车符（ASCII 代码 10）被单个换行符所取代。为了确保正确解析 XML 请求中的对象键，当将回车符和[其他特殊字符插入 XML 标签时，必须使用等效的 XML 实体代码替换回车符和其他](https://www.w3.org/TR/xml/#syntax)特殊字符。以下是此类特殊字符及其等效实体代码的列表：
+ `'` 用作 `&apos;`
+ `”` 用作 `&quot;`
+ `&` 用作 `&amp;`
+ `<` 用作 `&lt;`
+ `<` 用作 `&gt;`
+ `\r` 用作 `&#13;` 或 `&#x0D;`
+ `\n` 用作 `&#10;` 或 `&#x0A;`

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

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