你当前正在访问 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 字符,例如 (0x00) 0x1F 的控制字符。 有关在 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 协议也支持这些字符。 “列出目录”和“文件”“列表句柄” 操作需要对这些字符进行特殊处理,如各自的文档中所述。

默认情况下,目录末尾的点 (.) 字符和请求 URL 中的文件名将被忽略或忽略。

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

下表比较了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  

另请参阅