从AWS文档中,我理解:
然而,这些规则似乎过于宽松。
例如,如果我创建一个名为“../../d”的密钥,当我尝试使用GET OBJECT API访问它时会发生400 ERROR。有趣的是,我没有问题访问'../ d'。
是否有文件说明什么是合法的?
答案 0 :(得分:52)
虽然您可以在对象键名中使用任何UTF-8字符,但以下键命名最佳实践有助于确保与其他应用程序的最大兼容性。每个应用程序可以不同地解析特殊字符。以下指南可帮助您最大限度地遵守DNS,Web安全字符,XML解析器和其他API。
请在下面找到
以下字符集通常是安全的用于密钥名称:
关于DELIMITER的注释(“ / ”)
以下是有效对象键名称的示例:
4my组织
my.great_photos-2014 / JAN / myvacation.jpg
视频/ 2014 /生日/ video1.wmv
请注意,Amazon S3数据模型是扁平结构:您创建存储桶,存储桶存储对象。没有subbuckets或子文件夹的层次结构;但是,您可以使用keyname前缀和分隔符来推断逻辑层次结构,如Amazon S3控制台所做的那样。
例如,如果您使用 Private / taxdocument.pdf 作为密钥,它将创建私有文件夹,其中包含 taxdocument.pdf
Amazon S3支持存储桶和对象,Amazon S3中没有层次结构。但是,对象键名称中的前缀和分隔符使Amazon S3控制台和AWS开发工具包能够推断层次结构并引入文件夹概念。
密钥名称中的以下字符可能需要额外的代码处理,并且可能需要进行URL编码或引用为HEX。其中一些是不可打印的字符,您的浏览器可能无法处理它们,这也需要特殊处理:
由于对所有应用程序的一致性进行了重要的特殊处理,因此应避免键名中包含以下字符。
答案 1 :(得分:13)
亚马逊提供的唯一限制是(在Technical FAQ上找到):
存储桶或对象名称中允许使用哪些字符?
密钥是一系列Unicode字符,其UTF-8编码长度最多为1024字节。
其他限制适用于Buckets(在Bucket Restrictions and Limitations常见问题解答的 Bucket Naming规则部分中找到):
在除美国标准区域以外的所有地区,水桶名称必须符合 遵守规则。这会产生符合DNS的存储桶名称。
- 存储桶名称必须至少为3且不超过63个字符
- 存储桶名称必须是一系列由句点(。)分隔的一个或多个标签,其中每个标签:
- 必须以小写字母或数字
开头- 必须以小写字母或数字
结尾- 可以包含小写字母,数字和短划线
- 不得将存储桶名称格式化为IP地址(例如,192.168.5.4)
不太宽松的限制适用于美国标准区域。请参阅常见问题解答 信息和一些例子。希望它有所帮助!