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

Path - Update

追加数据 |刷新数据 |设置属性 |设置访问控制
上传要追加到文件的数据、刷新以前上传到文件的数据、设置文件或目录的属性,或设置文件或目录的访问控制。 数据只能追加到文件中。 不支持使用多个客户端对同一文件的并发写入。 此操作支持条件 HTTP 请求。 有关详细信息,请参阅 为 Blob 服务操作指定条件标头

PATCH https://{accountName}.{dnsSuffix}/{filesystem}/{path}?action={action}
PATCH https://{accountName}.{dnsSuffix}/{filesystem}/{path}?action={action}&position={position}&retainUncommittedData={retainUncommittedData}&close={close}&mode={mode}&maxRecords={maxRecords}&forceFlag={forceFlag}&continuation={continuation}&flush={flush}&timeout={timeout}

URI 参数

名称 必需 类型 说明
accountName
path True

string

Azure 存储帐户名称。

dnsSuffix
path True

string

Azure Data Lake Storage 终结点的 DNS 后缀。

filesystem
path True

string

minLength: 3
maxLength: 63
pattern: ^[$a-z0-9](?!.*--)[-a-z0-9]{1,61}[a-z0-9]$

文件系统标识符。

path
path True

string

文件或目录路径。

action
query True

PathUpdateAction

操作必须是“append”才能上传要追加到文件的数据,“flush”以刷新以前将数据上传到文件、“setProperties”以设置文件或目录的属性,或“setAccessControl”以设置文件或目录的所有者、组、权限或访问控制列表,或“setAccessControlRecursive”以递归方式设置目录的访问控制列表。 请注意,必须为帐户启用分层Namespace才能使用访问控制。 另请注意,访问控制列表(ACL)包括所有者、拥有组和其他权限,因此 x-ms-permissions 和 x-ms-acl 请求标头互斥。

close
query

boolean

Azure 存储事件允许应用程序在文件更改时接收通知。 启用 Azure 存储事件后,将引发文件更改事件。 此事件具有一个属性,指示这是最终更改,以区分中间刷新到文件流与文件流的最终关闭之间的差异。 仅当操作为“刷新”并启用更改通知时,close 查询参数才有效。 如果关闭值为“true”且刷新操作成功完成,则服务会引发文件更改通知,该属性指示这是最终更新(文件流已关闭)。 如果为“false”,则会引发更改通知,指示文件已更改。 默认值为 false。 Hadoop ABFS 驱动程序将此查询参数设置为 true,以指示文件流已关闭。

continuation
query

string

对于“setAccessControlRecursive”操作,可选且有效。 使用每个调用处理的路径数是有限的。 如果要处理的路径数超过此限制,则会在响应标头 x-ms-continuation 中返回延续标记。 在响应中返回延续标记时,它必须经过百分比编码,并在后续调用 setAccessControlRecursive 操作中指定。

flush
query

boolean

仅对追加调用有效。 此参数允许调用方在追加调用期间刷新。 默认值为“false”,如果为“true”,则会使用追加调用刷新数据。 请注意,使用 flush=true 时,不支持以下标头 - “x-ms-cache-control”、“x-ms-content-encoding”、“x-ms-content-type”、“x-ms-content-language”、“x-ms-content-md5”、“x-ms-content-disposition”。 若要在刷新过程中设置这些标头,请使用 action=flush

forceFlag
query

boolean

对于“setAccessControlRecursive”操作,可选且有效。 如果这是“false”操作,在遇到用户错误(4XX)时会很快终止。 如果为“true”,API 将忽略用户错误,并继续对目录的其他子实体执行操作。 将在任一方案的响应中返回用户错误的详细状态。 仅当 forceFlag 为“true”时,才会返回延续标记,以防出现用户错误。 forceFlag 的默认值为 false。

maxRecords
query

integer (int32)

minimum: 1

对于“setAccessControlRecursive”操作,可选且有效。 它指定应用 acl 更改的最大文件或目录数。 如果省略或大于 2,000 个,则请求将处理最多 2,000 个项目

mode
query

string

自选。 “setAccessControlRecursive”操作有效且必需。 模式“set”设置文件和目录的 POSIX 访问控制权限,“修改”修改文件和目录上预先存在的一个或多个 POSIX 访问控制权限,“删除”将删除先前在文件和目录上存在的一个或多个 POSIX 访问控制权限

position
query

integer (int64)

此参数允许调用方并行上传数据,并控制将数据追加到文件的顺序。 上传要追加到文件的数据以及将数据刷新到文件时,需要用到该文件。 该值必须是要追加数据的位置。 上载的数据不会立即刷新或写入文件。 若要刷新,以前上传的数据必须连续,位置参数必须指定并等于写入所有数据后文件长度,并且请求中不得包含请求实体正文。

retainUncommittedData
query

boolean

仅适用于刷新操作。 如果为“true”,则刷新操作完成后保留未提交的数据;否则,刷新操作后将删除未提交的数据。 默认值为 false。 刷新成功时,偏移量小于指定位置的数据将写入文件,但此可选参数允许在刷新位置之后保留数据,以便将来刷新操作。

timeout
query

integer (int32)

minimum: 1

可选操作超时值(以秒为单位)。 句点从服务接收请求时开始。 如果超时值在操作完成之前运行,则操作将失败。

请求头

Media Types: "application/octet-stream", "text/plain"

名称 必需 类型 说明
Content-Length

integer (int64)

minimum: 0

“追加数据”和“刷新数据”是必需的。 对于“刷新数据”,必须为 0。 必须是“追加数据”的请求内容的长度(以字节为单位)。

Content-MD5

string

自选。 请求内容的 MD5 哈希。 此标头在“Append”和“Flush”操作上有效。 此哈希用于验证传输过程中请求内容的完整性。 指定此标头后,存储服务会将到达的内容的哈希与此标头值进行比较。 如果两个哈希不匹配,操作将失败,错误代码为 400(请求错误)。 请注意,此 MD5 哈希未随文件一起存储。 此标头与请求内容相关联,而不是与文件本身的存储内容相关联。

x-ms-lease-id

string

pattern: ^[{(]?[0-9a-f]{8}[-]?([0-9a-f]{4}[-]?){3}[0-9a-f]{12}[)}]?$

如果存在活动租约,则必须指定租约 ID。 “setAccessControlRecursive”操作无效。

x-ms-cache-control

string

可选且仅对刷新和设置属性操作有效。 该服务存储此值,并将其包含在“读取文件”操作的“Cache-Control”响应标头中。

x-ms-content-type

string

可选且仅对刷新和设置属性操作有效。 该服务存储此值并将其包含在“读取文件”操作的“Content-Type”响应标头中。

x-ms-content-disposition

string

可选且仅对刷新和设置属性操作有效。 该服务存储此值,并将其包含在“读取文件”操作的“Content-Disposition”响应标头中。

x-ms-content-encoding

string

可选且仅对刷新和设置属性操作有效。 该服务存储此值,并将其包含在“读取文件”操作的“Content-Encoding”响应标头中。

x-ms-content-language

string

可选且仅对刷新和设置属性操作有效。 该服务存储此值并将其包含在“读取文件”操作的“Content-Language”响应标头中。

x-ms-content-md5

string

可选且仅对“刷新和设置属性”操作有效。 该服务存储此值,并将其包含在“读取和获取属性”操作的“Content-Md5”响应标头中。 如果未在请求中指定此属性,则会清除该文件的属性。 对“读取和获取属性”的后续调用将不会返回此属性,除非它再次在该文件上显式设置。

x-ms-properties

string

自选。 要与文件或目录一起存储的用户定义属性,格式为逗号分隔的名称和值对列表“n1=v1,n2=v2,...”,其中每个值都是 base64 编码字符串。 请注意,字符串只能包含 ISO-8859-1 字符集中的 ASCII 字符。 仅适用于 setProperties 操作。 如果文件或目录存在,列表中未包含的任何属性都将被删除。 如果省略标头,则会删除所有属性。 若要合并新属性和现有属性,请先获取所有现有属性和当前 E-Tag,然后使用 E-Tag 发出条件请求,并包括所有属性的值。

x-ms-owner

string

仅适用于 setAccessControl 操作的可选和有效。 设置文件或目录的所有者。

x-ms-group

string

仅适用于 setAccessControl 操作的可选和有效。 设置文件或目录的拥有组。

x-ms-permissions

string

可选且仅在为帐户启用分层Namespace时才有效。 设置文件所有者、文件拥有组和其他文件的 POSIX 访问权限。 可以授予每个类读取(4)、写入(2)或执行 (1) 权限。 支持符号符号(rwxrw-rw-)和 4 位八进制表示法(例如 0766)。 粘性位也受支持,在符号表示法中,它由字母 t 或 T 表示,具体取决于其他类别的执行位是分别设置还是未设置(例如,带有粘滞位的 rwxrw-rw- 表示为 rwxrw-rwT)。带有粘滞位的 rwxrw-rwx 表示为 rwxrw-rwt),不存在 t 或 T 表示未设置粘滞位。 在 4 位八进制表示法中,它由第一位数字表示(例如 1766 表示具有粘性位的 rwxrw-rw),0766 表示 rwxrw-rw-without粘性位)。 与 x-ms-acl 结合使用无效。

x-ms-acl

string

对于 setAccessControl 和 setAccessControlRecursive 操作,可选且有效。 setAccessControlRecursive 操作是必需的。 设置文件和目录的 POSIX 访问控制权限。 该值是一个逗号分隔的访问控制项列表,在 setAccessControl 和 setAccessControlRecursive 的“set”模式下,完全替换现有访问控制列表(ACL)。 setAccessControlRecursive 的“modify”模式更新预先存在的 ACLS。 每个访问控制项(ACE)由范围、类型、用户或组标识符以及格式为“[scope:][type]:[id]:[permissions]”格式的权限组成。 范围必须为“default”,以指示 ACE 属于目录的默认 ACL;否则范围为隐式范围,ACE 属于访问 ACL。 有四种 ACE 类型:“user”向所有者或命名用户授予权限,“组”向拥有组或命名组授予权限,“掩码”将授予给命名用户和组成员的权限,“其他”向未在任何其他条目中找到的所有用户授予权限。 对于类型为“mask”和“other”的条目,省略用户或组标识符。 所有者和拥有组也省略用户或组标识符。 权限字段是一个 3 个字符序列,其中第一个字符是“r”来授予读取访问权限,第二个字符是“w”来授予写入访问权限,第三个字符是“x”,用于授予执行权限。 如果未授予访问权限,则使用“-”字符表示拒绝该权限。 例如,以下 ACL 授予对文件所有者和john.doe@contoso、拥有组的读取权限、写入和执行权限,对其他人没有任何权限:“user::rwx,user:john.doe@contoso:rwx,group::r--,other::---,mask=rwx”。 与 x-ms-permissions 结合使用无效。 setAccessControlRecursive 的“remove”模式删除了预先存在的 ACL,不应在指定的访问控制列表中包含权限:“user:john.doe@contoso:, mask:”。 setAccessControlRecursive 的“set”模式设置替换指定范围预先存在的 ACL 的 ACL,并且必须包含所有三种 -- 拥有用户、拥有组和其他信息(如果已设置访问范围,或者是否在默认范围内设置拥有用户、拥有组或其他项)。 setAccessControlRecursive 的“set”和“modify”模式必须包含作为访问控制列表的一部分的权限。

If-Match

string

“刷新数据”、“设置访问控制”和“设置属性”可选,但对追加数据和设置访问控制递归无效。 ETag 值。 仅当资源的 ETag 与指定的值匹配时,才指定此标头来执行该操作。 必须在引号中指定 ETag。

If-None-Match

string

“刷新数据”、“设置访问控制”和“设置属性”可选,但对追加数据和设置访问控制递归无效。 ETag 值或特殊通配符 (“*”) 值。 仅当资源的 ETag 与指定的值不匹配时,才指定此标头来执行该操作。 必须在引号中指定 ETag。

If-Modified-Since

string

“刷新数据和设置属性”可选,但对追加数据和设置访问控制递归无效。 日期和时间值。 仅当资源自指定日期和时间以来已修改时,才指定此标头以执行该操作。

If-Unmodified-Since

string

“刷新数据和设置属性”可选,但对追加数据和设置访问控制递归无效。 日期和时间值。 仅当资源自指定日期和时间以来尚未修改时,才指定此标头来执行该操作。

x-ms-encryption-key

string

自选。 Base64 编码的 AES-256 加密密钥。

x-ms-encryption-key-sha256

string

自选。 加密密钥的 Base64 编码 SHA256 哈希。

x-ms-encryption-algorithm: AES256

string

自选。 指定要用于加密的算法。 此标头的值必须是 AES256。

x-ms-lease-action True

PathLeaseAction

从追加和刷新操作版本 2020-08-04 开始。 Append 支持“acquire”、“auto-renew”和“acquire-release”操作。 如果“acquire”,它将获取租约。 如果“自动续订”,它将续订租约。 如果“acquire-release”,它将获取 & 完成操作 & 释放租约的操作。 “Release”操作仅在刷新操作中受支持。 如果为“true”,将使用 x-ms-lease-id 标头中的租约 ID 信息释放文件中的租约。

x-ms-lease-duration

integer (int32)

获取租约需要租约持续时间,并指定租约持续时间(以秒为单位)。 租约持续时间必须介于 15 到 60 秒之间,或 -1 无限租约。

x-ms-proposed-lease-id

string

pattern: ^[{(]?[0-9a-f]{8}[-]?([0-9a-f]{4}[-]?){3}[0-9a-f]{12}[)}]?$

当“x-ms-lease-action”为“acquire”或“change”时必需。 如果操作成功,将使用此租约 ID 获取租约。

x-ms-client-request-id

string

pattern: ^[{(]?[0-9a-f]{8}[-]?([0-9a-f]{4}[-]?){3}[0-9a-f]{12}[)}]?$

分析日志中记录的 UUID,用于故障排除和关联。

x-ms-date

string

指定请求的协调世界时(UTC)。 使用共享密钥授权时,这是必需的。

x-ms-version

string

指定用于处理请求的 REST 协议的版本。 使用共享密钥授权时,这是必需的。

请求正文

Media Types: "application/octet-stream", "text/plain"

名称 类型 说明
requestBody

object (file)

仅对追加操作有效。 要上传和追加到文件的数据。

响应

名称 类型 说明
200 OK

SetAccessControlRecursiveResponse

数据已刷新(写入)到文件,或者已成功设置属性。 响应正文是可选的,仅适用于“SetAccessControlRecursive”

标头

  • Date: string
  • ETag: string
  • Last-Modified: string
  • Accept-Ranges: string
  • Cache-Control: string
  • Content-Disposition: string
  • Content-Encoding: string
  • Content-Language: string
  • Content-Length: integer
  • Content-Range: string
  • Content-Type: string
  • Content-MD5: string
  • x-ms-properties: string
  • x-ms-continuation: string
  • x-ms-request-id: string
  • x-ms-version: string
  • x-ms-request-server-encrypted: true/false: boolean
  • x-ms-encryption-key-sha256: string
  • x-ms-encryption-scope: string
  • x-ms-lease-renewed: boolean
202 Accepted

已上传的数据已接受。

标头

  • Content-MD5: string
  • Date: string
  • x-ms-request-id: string
  • x-ms-version: string
  • x-ms-lease-renewed: boolean
Other Status Codes

DataLakeStorageError

发生错误。 下面列出了可能的 HTTP 状态、代码和消息字符串:

  • 400 错误请求,ContentLengthMustBeZero,“Content-Length 请求标头必须为零。
  • 400 错误请求,InvalidAuthenticationInfo,“身份验证信息的格式不正确。 检查 Authorization 标头的值。”
  • 400 错误请求,InvalidFlushPosition,“上传的数据不是连续的,或者位置查询参数值不等于追加上传的数据后文件长度。
  • 400 错误请求,InvalidHeaderValue,“其中一个 HTTP 标头的值的格式不正确。
  • 400 错误请求,InvalidHttpVerb,“指定的 HTTP 谓词无效 - 服务器无法识别它。
  • 400 错误请求,InvalidInput,“请求输入之一无效。
  • 400 错误请求,InvalidPropertyName,“属性名称不能为空。
  • 400 错误请求,InvalidPropertyName,“属性名称包含无效字符。
  • 400 错误请求,InvalidQueryParameterValue,“请求 URI 中指定的某个查询参数的值无效。
  • 400 错误请求,InvalidResourceName,“指定的资源名称包含无效字符。
  • 400 错误的请求,InvalidSourceUri,“源 URI 无效”。
  • 400 错误的请求,InvalidUri,“请求 URI 无效。
  • 400 错误请求,MissingRequiredHeader,“未指定此请求必需的 HTTP 标头。
  • 400 错误请求,MissingRequiredQueryParameter,“未指定此请求必需的查询参数。
  • 400 错误请求,MultipleConditionHeadersNotSupported,“不支持多个条件标头。
  • 400 错误请求,OutOfRangeInput,“请求输入之一超出范围。
  • 400 错误的请求,OutOfRangeQueryParameterValue,“请求 URI 中指定的查询参数之一超出了允许的范围。
  • 400 错误请求,UnsupportedHeader,“不支持请求中指定的标头之一。
  • 400 错误请求,UnsupportedQueryParameter,“不支持在请求 URI 中指定的查询参数之一。
  • 400 错误请求,UnsupportedRestVersion,“指定的 Rest 版本不受支持”。
  • 403 禁止,AccountIsDisabled,“指定的帐户已禁用。
  • 403 禁止,AuthorizationFailure,“此请求无权执行此操作。
  • 403 禁止,InsufficientAccountPermissions,“正在访问的帐户没有足够的权限来执行此操作。
  • 404 找不到,FilesystemNotFound,“指定的文件系统不存在。
  • 404 未找到,PathNotFound,“指定的路径不存在”。
  • 404 找不到,RenameDestinationParentPathNotFound,“目标路径的父目录不存在。
  • 404 找不到 ResourceNotFound,“指定的资源不存在”。
  • 404 未找到,SourcePathNotFound,“重命名操作的源路径不存在。
  • 405 方法不允许,UnsupportedHttpVerb,“资源不支持指定的 HTTP 谓词。
  • 409 冲突,DestinationPathIsBeingDeleted,“指定的目标路径标记为要删除。
  • 409 冲突,DirectoryNotEmpty,“递归查询参数值必须是 true 才能删除非空目录。
  • 409 冲突,FilesystemAlreadyExists,“指定的文件系统已存在。
  • 409 冲突,FilesystemBeingDeleted,“正在删除指定的文件系统。
  • 409 冲突,InvalidDestinationPath,“指定的路径或路径的元素存在,其资源类型对于此操作无效。* 409 冲突,InvalidFlushOperation,“资源是由 Blob 服务 API 创建或修改的,不能由 Data Lake Storage Service API 写入。
  • 409 冲突,InvalidRenameSourcePath,“源目录不能与目标目录相同,目标也不能是源目录的子目录。
  • 409 冲突,InvalidSourceOrDestinationResourceType,“源和目标资源类型必须相同。
  • 409 冲突,LeaseAlreadyPresent,“已经有租约存在。
  • 409 冲突,LeaseIdMismatchWithLeaseOperation,“指定的租约 ID 与具有指定租约操作的资源的租约 ID 不匹配。
  • 409 冲突,LeaseIsAlreadyBroken,“租约已经损坏,不能再次损坏。
  • 409 冲突,LeaseIsBreakingAndCannotBeAcquired,“租约 ID 匹配,但租约当前处于中断状态,在中断之前无法获取。
  • 409 冲突,LeaseIsBreakingAndCannotBeChanged,“租约 ID 匹配,但租约当前处于中断状态,无法更改。
  • 409 冲突,LeaseIsBrokenAndCannotBeRenewed,“租约 ID 匹配,但租约已显式断开,无法续订。
  • 409 冲突,LeaseNameMismatch,“指定的租约名称与现有租约名称不匹配。
  • 409 冲突,LeaseNotPresentWithLeaseOperation,“租约 ID 不存在于指定的租约操作中。
  • 409 冲突,PathAlreadyExists,“指定的路径已存在。
  • 409 冲突,PathConflict,“指定的路径或路径的元素存在,其资源类型对于此操作无效。
  • 409 冲突,SourcePathIsBeingDeleted,“指定的源路径标记为要删除。
  • 409 冲突,ResourceTypeMismatch,“请求中指定的资源类型与资源的类型不匹配。
  • 412 前置条件失败,ConditionNotMet,“未满足使用 HTTP 条件标头指定的条件。
  • 412 前置条件失败,LeaseIdMismatch,“指定的租约 ID 与资源的租约 ID 不匹配。
  • 412 前置条件失败,LeaseIdMissing,“资源当前存在租约,请求中未指定租约 ID。
  • 412 前置条件失败,LeaseNotPresent,“当前没有资源租约。
  • 412 先决条件失败,LeaseLost,“已指定租约 ID,但资源的租约已过期。
  • 412 前置条件失败,SourceConditionNotMet,“未满足使用 HTTP 条件标头指定的源条件。
  • 413 请求实体太大,RequestBodyTooLarge,“请求正文太大,超过允许的最大限制。
  • 416 请求的范围不能满足,InvalidRange,“指定的范围对于资源的当前大小无效。
  • 500 内部服务器错误,InternalError,“服务器遇到内部错误。 请重试请求。
  • 500 内部服务器错误 OperationTimedOut,“操作无法在允许的时间内完成。
  • 503 服务不可用,ServerBusy,“出口超出帐户限制。
  • 503 服务不可用,ServerBusy,“入口超出帐户限制。
  • 503 服务不可用,ServerBusy,“每秒操作数超过帐户限制。
  • 503 服务不可用,ServerBusy,“服务器当前无法接收请求。 请重试请求。

标头

  • x-ms-request-id: string
  • x-ms-version: string

定义

名称 说明
AclFailedEntryList
DataLakeStorageError
Error

服务错误响应对象。

PathLeaseAction

从追加和刷新操作版本 2020-08-04 开始。 Append 支持“acquire”、“auto-renew”和“acquire-release”操作。 如果“acquire”,它将获取租约。 如果“自动续订”,它将续订租约。 如果“acquire-release”,它将获取 & 完成操作 & 释放租约的操作。 “Release”操作仅在刷新操作中受支持。 如果为“true”,将使用 x-ms-lease-id 标头中的租约 ID 信息释放文件中的租约。

PathUpdateAction

操作必须是“append”才能上传要追加到文件的数据,“flush”以刷新以前将数据上传到文件、“setProperties”以设置文件或目录的属性,或“setAccessControl”以设置文件或目录的所有者、组、权限或访问控制列表,或“setAccessControlRecursive”以递归方式设置目录的访问控制列表。 请注意,必须为帐户启用分层Namespace才能使用访问控制。 另请注意,访问控制列表(ACL)包括所有者、拥有组和其他权限,因此 x-ms-permissions 和 x-ms-acl 请求标头互斥。

SetAccessControlRecursiveResponse

AclFailedEntryList

名称 类型 说明
errorMessage

string

name

string

type

string

DataLakeStorageError

名称 类型 说明
error

Error

服务错误响应对象。

Error

服务错误响应对象。

名称 类型 说明
code

string

服务错误代码。

message

string

服务错误消息。

PathLeaseAction

从追加和刷新操作版本 2020-08-04 开始。 Append 支持“acquire”、“auto-renew”和“acquire-release”操作。 如果“acquire”,它将获取租约。 如果“自动续订”,它将续订租约。 如果“acquire-release”,它将获取 & 完成操作 & 释放租约的操作。 “Release”操作仅在刷新操作中受支持。 如果为“true”,将使用 x-ms-lease-id 标头中的租约 ID 信息释放文件中的租约。

说明
acquire
acquire-release
auto-renew
release

PathUpdateAction

操作必须是“append”才能上传要追加到文件的数据,“flush”以刷新以前将数据上传到文件、“setProperties”以设置文件或目录的属性,或“setAccessControl”以设置文件或目录的所有者、组、权限或访问控制列表,或“setAccessControlRecursive”以递归方式设置目录的访问控制列表。 请注意,必须为帐户启用分层Namespace才能使用访问控制。 另请注意,访问控制列表(ACL)包括所有者、拥有组和其他权限,因此 x-ms-permissions 和 x-ms-acl 请求标头互斥。

说明
append
flush
setAccessControl
setAccessControlRecursive
setProperties

SetAccessControlRecursiveResponse

名称 类型 说明
directoriesSuccessful

integer (int32)

failedEntries

AclFailedEntryList[]

failureCount

integer (int32)

filesSuccessful

integer (int32)