你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

命名和引用共享、目录、文件和元数据

存储帐户可以包含零个或多个 Azure 文件共享。 共享包含属性、元数据以及零个或多个文件或目录。 目录包含属性和零个或多个文件或目录。 文件是由二进制数据、属性和元数据构成的任何单个实体。

资源名称

引用共享、目录或文件的 URI 必须是唯一的。 在给定的存储帐户中,每个共享都必须具有唯一的名称。 给定共享或目录中的每个文件还必须在该共享或目录中具有唯一的名称。

如果尝试创建具有违反命名规则的名称的共享、目录或文件,则请求将失败并显示状态代码 400(错误请求)。

共享名称

文件服务共享名称的规则比 SMB 共享名称的 SMB 协议规定的规则更严格,以便 Blob 和文件服务可以共享容器和共享的类似命名约定。 共享的命名限制如下所示:

  • 共享名称必须是有效的 DNS 名称。
  • 共享名称必须以字母或数字开头,并且只能包含字母、数字和连字符/减号(-) 字符。
  • 每个连字符/减号(-)字符必须紧接在前面,后跟字母或数字;共享名称中不允许连续连字符。
  • 共享名称中的所有字母都必须小写。
  • 共享名称长度必须介于 3 到 63 个字符之间。

下表比较了 Azure 文件和 Azure Blob 存储的命名限制:

命名和引用容器、Blob 和元数据 SMB 共享名称限制
• 容器名称必须是有效的 DNS 名称。
• 容器名称必须以字母或数字开头,并且只能包含字母、数字和连字符/减号(-) 字符。
• 每个连字符/减号(-)字符必须紧接在前面,后跟字母或数字;容器名称中不允许连续连字符。
• 容器名称中的所有字母都必须小写。
• 容器名称长度必须为 3 到 63 个字符。
• 共享名称长度不得超过 80 个字符。
• 以下字符在共享名称中是非法的:\ / [ ] : ¦ < > + = ; , * ? "
• 通过0x1F(含)控制范围0x00中的字符在共享名称中是非法的。
• 所有其他 Unicode 字符都是合法的。
• 名称是大小写保留,不区分大小写。

目录和文件名

Azure 文件针对目录和文件名强制实施以下命名规则:

  • 目录和文件名是保留大小写和不区分大小写的。
  • 目录和文件组件名称长度不得超过 255 个字符。
  • 目录名称不能以正斜杠字符 (/) 结尾。 如果提供,它将自动删除。
  • 文件名不得以正斜杠字符 (/) 结尾。
  • 必须正确转义保留的 URL 字符。
  • 不允许使用以下字符:" \ / : | < > * ?
  • 不允许非法 URL 路径字符。 代码点(如 \uE000)虽然在 NTFS 文件名中有效,但不是有效的 Unicode 字符。 此外,也不允许某些 ASCII 或 Unicode 字符(如控制字符(0x000x1F)。 有关在 HTTP/1.1 中管理 Unicode 字符串的规则,请参阅 RFC 2616 第 2.2 节:基本规则RFC 3987
  • 不支持无效的 Unicode 字符(称为无效代理项对)。
  • 不允许使用以下文件名:LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、PRN、AUX、NUL、CON、CLOCK$、点字符(.)和两个点字符(..)。
  • 从版本 2021-12-02 开始,目录和文件名通过所有作都支持 U+FFFE 和 U+FFFF 字符。 SMB 和 REST 协议也支持这些字符。 列表目录和文件列表句柄作需要对这些字符进行特殊处理,如各自的文档中所述。

默认情况下,对于启用了 SMB 协议的文件共享,将忽略或排除请求 URL 中目录末尾的点(.)字符和文件名。

  • 例如,如果要创建名为 file1... 的文件,将忽略末尾的点,并创建名为 file1 的文件。 这同样适用于路径中的目录。 如果文件创建请求包含路径 \Dir1\Dir2…\File1,则会在 \Dir1\Dir2\File1创建该文件。
  • 但是,从版本 2022-11-02开始,可以通过将标头 x-ms-allow-trailing-dot 设置为 URL 请求中的 true 来替代默认行为。
  • 例如,如果要创建名为 file1... 的文件并包含尾随点,则应将 x-ms-allow-trailing-dot 包含在请求标头中,并将其设置为 true。 这同样适用于创建目录名称。
  • 对于文件复制请求,如果要在源文件名称中包含尾随点,则必须将 x-ms-source-allow-trailing-dot 标头设置为 true。 有关详细信息,请查看每个单独的 REST API 的可用标头选项。

默认情况下,对于启用了 NFS 协议的文件共享,请求 URL 中目录末尾的点 (.) 字符 不会 忽略。

下表比较了 Azure 文件和 Azure Blob 存储的命名限制:

命名和引用容器、Blob 和元数据 SMB 协议名称限制
• Blob 名称长度必须至少为一个字符,长度不能超过 1,024 个字符。
• Blob 名称区分大小写。
• 必须正确转义保留的 URL 字符。
• Blob 名称可以以虚拟目录分隔符结尾,例如正斜杠(/)
• 不允许非法 URL 路径字符:代码点(如 \uE000)在 NTFS 文件名中有效,但无效的 Unicode 字符。 此外,也不允许某些 ASCII 或 Unicode 字符(如控制字符(0x00 0x1F)。 有关在 HTTP/1.1 中管理 Unicode 字符串的规则,请参阅 RFC 2616 第 2.2 节:基本规则RFC 3987
• 路径名称长度不能超过 32,760 个字符。
• 每个路径名称组件(文件/目录)长度不得超过 255 个字符。
• 路径名称由一个或多个路径名称组件组成,由 (\) 向后斜杠字符分隔。
• 路径名称是大小写保留和不区分大小写(两个名称只允许区分大小写)。
• 不能具有与文件路径相同的目录路径。
• 以下字符在组件名称中是非法的:\ / : ¦ < > * ? "
• 通过0x1F(含)控制范围0x00中的字符在共享名称中是非法的。

路径名称

路径名称由由正斜杠(/)字符分隔的一个或多个路径名称组件(目录或文件名)组成。 除最后一个路径名称组件以外的所有路径名称组件表示目录。 最后一个路径名称组件表示目录或文件。 以下命名规则适用:

  • 路径名称长度不能超过 2,048 个字符。 路径中的单个组件长度最多可为 255 个字符。
  • 路径名称由一个或多个由正斜杠 (/) 字符分隔的路径名称组件组成。
  • 路径中的子目录深度不能超过 250。
  • 同名不能用于共享同一父目录的文件和目录。 例如,同一父路径下不存在每个命名 data 的文件和目录。

元数据名称

共享或文件资源的元数据存储为与资源关联的名称/值对。 元数据名称必须遵循 C# 标识符的命名规则。

元数据名称保留创建它们的大小写,但在设置或读取时不区分大小写。 如果为资源提交了两个或多个具有相同名称的元数据标头,Azure 文件服务将返回状态代码 400(错误请求)。

资源 URI 语法

每个资源都有相应的基 URI,它引用资源本身。 对于存储帐户,基本 URI 仅包括帐户的名称:

https://myaccount.file.core.windows.net

对于共享,基本 URI 包括帐户的名称和共享的名称:

https://myaccount.file.core.windows.net/myshare

对于目录,基 URI 包括帐户的名称、共享的名称和目录的路径:

https://myaccount.file.core.windows.net/myshare/myparentdir/mydir

对于文件,基本 URI 包括帐户的名称、共享的名称和文件的路径:

https://myaccount.file.core.windows.net/myshare/myfile  
https://myaccount.file.core.windows.net/myshare/mydir/myfile  
https://myaccount.file.core.windows.net/myshare/myparentdir/mydir/myfile  

另请参阅