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

放置范围

Put Range操作可向文件写入一个字节范围。

协议可用性

已启用文件共享协议 可用
SMB 是
NFS 否

请求

可以按如下方式构建Put Range请求。 建议使用 HTTPS。

方法 请求 URI HTTP 版本
PUT https://myaccount.file.core.windows.net/myshare/mydirectorypath/myfile?comp=range HTTP/1.1

将请求 URI 中所示的路径组件替换为你自己的组件,如下所示:

路径组件 说明
myaccount 存储帐户的名称。
myshare 文件共享的名称。
mydirectorypath 可选。 父目录的路径。
myfile 文件的名称。

有关路径命名限制的信息,请参阅 名称和引用共享、目录、文件和元数据

URI 参数

可以在请求 URI 上指定以下附加参数。

参数 说明
timeout 可选。 timeout 参数以秒表示。 有关详细信息,请参阅 设置文件服务操作的超时

请求标头

下表描述了必需的和可选的请求标头:

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求
Datex-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求
x-ms-version 对于所有已授权的请求是必需的。 指定用于此请求的操作的版本。 有关详细信息,请参阅 Azure 存储服务的版本控制
Rangex-ms-range Range or x-ms-range is required.

指定要写入的字节范围。 必须指定范围的上限和下限。 此标头由 HTTP/1.1 协议规范定义。

对于更新操作,该范围的大小最大可以为 4 MiB。 对于清除操作,范围最大可为文件的完整大小值。

文件服务仅接受 和 x-ms-range 标头的单个字节范围Range,并且必须使用以下格式指定字节范围:bytes=startByte-endByte

如果指定了 Rangex-ms-range,服务将使用 x-ms-range 值。 有关详细信息,请参阅 指定文件服务操作的范围标头
Content-Length 必需。 指定在请求正文中传送的字节数。 当 标头 x-ms-write 设置为 clear时,此标头的值必须设置为 0
Content-MD5 可选。 内容的 MD5 哈希值。 此哈希值用于验证传输期间数据的完整性。 Content-MD5指定标头时,Azure 文件存储会将到达的内容的哈希与发送的标头值进行比较。 如果这两个哈希值不匹配,操作会失败,并显示错误代码 400(错误请求)。

Content-MD5 标头设置为 clear时,x-ms-write不允许使用 标头。 如果它包含在请求中,则文件服务将返回状态代码 400 (错误的请求) 。
x-ms-write: { update ¦ clear } 必需。 必须指定以下选项之一:
  • update:将请求正文指定的字节写入指定的范围。 RangeContent-Length 标头必须匹配才能执行更新。
  • clear:清除指定的范围并释放该范围的存储中所使用的空间。 若要清除某个区域,请将 Content-Length 标头设置为 0,并将 标头设置为 Range 一个值,该值指示要清除的范围,最大文件大小。
x-ms-lease-id: <ID> 如果文件具有活动租约,则为必需。 适用于版本 2019-02-02 及更高版本。
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其中包含 1-kibite (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅监视Azure 文件存储
x-ms-file-last-write-time: { now ¦ preserve } 可选。 版本 2021-06-08 及更高版本。 可以指定以下选项之一:
  • now:默认值。 汇报上次写入时间时间戳到请求的时间。
  • preserve:保持现有上次写入时间戳不变。
x-ms-file-request-intent 如果 Authorization 标头指定 OAuth 令牌,则为必需。 可接受的值为 backup。 此标头指定Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/actionMicrosoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action如果或包含在分配给使用 标头授权的标识的 RBAC 策略中,则应授予 或 Authorization 。 适用于版本 2022-11-02 及更高版本。
x-ms-allow-trailing-dot: { <Boolean> } 可选。 版本 2022-11-02 及更高版本。 布尔值指定是否应剪裁请求 URL 中存在的尾随点。 有关详细信息,请参阅 命名和引用共享、目录、文件和元数据

请求正文

表示要上传的范围的数据。

示例请求:更新字节范围

Request Syntax:  
PUT https://myaccount.file.core.windows.net/myshare/myfile?comp=range HTTP/1.1  
  
Request Headers:  
x-ms-write: update  
x-ms-date: Mon, 27 Jan 2014 22:15:50 GMT  
x-ms-version: 2014-02-14  
x-ms-range: bytes=0-65535  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
Content-Length: 65536  

示例请求:清除字节范围

Request Syntax:  
PUT https://myaccount.file.core.windows.net/myshare/myfile?comp=range HTTP/1.1  
  
Request Headers:  
Range: bytes=1024-2048  
x-ms-write: clear  
x-ms-date: Mon, 27 Jan 2014 23:37:35 GMT  
x-ms-version: 2014-02-14  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  

响应

响应包括 HTTP 状态代码和一组响应标头。

状态代码

此操作成功后返回状态代码 201(已创建)。

有关状态代码的详细信息,请参阅 状态和错误代码

响应头

此操作的响应包括以下标头。 该响应还可能包括其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范

响应标头 说明
ETag ETag 包含一个值,该值表示文件的版本。 该值用引号引起来。
Last-Modified 返回上次修改目录的日期和时间。 日期格式遵循 RFC 1123。 有关详细信息,请参阅 在标头中表示日期/时间值。 修改共享或者其属性或元数据的任何操作将更新上次修改时间。 对文件执行的操作不会影响共享的上次修改时间。
Content-MD5 返回此标头是为了客户端可以检查消息内容完整性。 此标头的值由文件服务计算。 它不一定与请求标头中指定的值相同。
x-ms-request-id 唯一标识发出的请求,并可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作疑难解答
x-ms-version 指示用于执行请求的文件服务版本。
Date 由服务生成的 UTC 日期/时间值,指示启动响应的时间。
x-ms-request-server-encrypted: { true ¦ false } 版本 2017-04-17 及更高版本。 如果使用指定的算法成功加密请求的内容,则此标头的值设置为 true 。 否则,该值将设置为 false
x-ms-client-request-id 此标头可用于对请求和相应响应进行故障排除。 如果请求中存在此标头的值,并且该值包含不超过 1,024 个可见 ASCII 字符,则此标头的值等于该标头的值 x-ms-client-request-idx-ms-client-request-id如果请求中不存在标头,则响应中不存在该标头。
x-ms-file-last-write-time 版本 2021-06-08 及更高版本。 文件的上次写入时间,采用 ISO 8601 格式。 示例:2017-05-10T17:52:33.9551861Z

响应正文

无。

示例响应

Response Status:  
HTTP/1.1 201 Created  

Response Headers:  
Transfer-Encoding: chunked  
Content-MD5: sQqNsWTgdUEFt6mb5y4/5Q==  
Date:Mon, 27 Jan 2014 22:33:35 GMT  
ETag: "0x8CB171BA9E94B0B"  
Last-Modified: Mon, 27 Jan 2014 12:13:31 GMT  
x-ms-version: 2014-02-14  
Content-Length: 0  
Server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0  

授权

只有帐户所有者可以调用此操作。

备注

Put Range操作可向文件写入一个字节范围。 只能在现有文件上调用此操作。 无法调用它来创建新文件。 使用当前不存在的文件名调用 Put Range 将返回状态代码 404 (找不到) 。

若要创建新文件,请调用 “创建文件”。 一个文件的最大大小可以为 4 TiB。

Put Range每个 MiB 允许 10 分钟完成操作。 如果每个 MiB 操作花费的时间平均超过 10 分钟,则会超时。

如果文件具有活动租约,则客户端必须在写入范围的请求上指定有效的租约 ID。

范围更新操作

使用 Update 选项调用Put Range时,将对指定的文件执行就地写入。 更新将覆盖指定范围中的所有内容。 为更新操作提交的 Put Range 每个范围可能最大为 4 MiB。 如果尝试上传大于 4 MiB 的范围,服务将返回状态代码 413 (请求实体太大) 。

范围清除操作

使用 Clear 选项调用Put Range会释放存储中的空间,但前提是指定的范围已经过 512 字节对齐。 已清除的范围不再作为文件的一部分进行跟踪,并且不会在 列表范围 响应中返回。 如果指定的范围不是 512 字节对齐的,则操作会将零写入未对齐 512 字节的区域的开头或末尾,并释放 512 字节对齐范围内的其余区域。

未清除的任何范围将在 “列表范围” 响应中返回。 有关示例,请参阅下面的“示例未对齐的清除范围”部分。

文件租约
可以调用 租约文件 来获取针对其他写入操作对文件的独占写入锁定,持续时间无限。

SMB 客户端字节范围锁

SMB 协议允许字节范围锁管理对文件区域的读取和写入访问。 这意味着,Put Range如果 SMB 客户端的锁与使用 x-ms-range的操作指定的范围重叠,Put Range则失败。 有关详细信息,请参阅 管理文件锁

SMB 客户端目录更改通知

SMB 协议支持 FindFirstChangeNotification API 函数,该函数允许应用程序检测文件系统中何时发生更改。 它可以检测文件或目录的添加、更改或删除时间,以及文件大小、属性或安全描述符的更改时间。 当通过 Azure 文件存储 REST API 发生文件或目录更改时,使用此 API 的 SMB 客户端不会收到通知。 但是,其他 SMB 客户端导致的更改会传播通知。

示例未对齐的清除范围

假设使用 “创建文件”创建文件 ,并使用 编写 Put Range单个区域,如下所示:

Request Syntax:  
PUT https://myaccount.file.core.windows.net/myshare/myfile?comp=range HTTP/1.1  

Request Headers:  
x-ms-write: updte  
x-ms-date: Mon, 27 Jan 2014 22:15:50 GMT  
x-ms-version: 2014-02-14  
x-ms-range: bytes=0-65536  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
Content-Length: 65536  

对文件执行 “列表范围 ”操作将返回以下响应正文:

<?xml version="1.0" ecoding="utf-8"?>  
<Ranges>  
<Range>  
<Start>0</Start>  
<End>65536</End>  
</Range>  
</Ranges>  

现在,假设执行了未对齐的清除范围字节范围操作:

Request Syntax:  
PUT https://myaccount.file.core.windows.net/myshare/myfile?comp=range HTTP/1.1  

Request Headers:  
Range: bytes=768-2304  
x-ms-write: clear  
x-ms-date: Mon, 27 Jan 2014 23:37:35 GMT  
x-ms-version: 2014-02-14  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  

对文件执行的后续 “列表范围 ”操作将返回以下响应正文:

<?xml version="1.0" encoding="utf-8"?>  
<Ranges>  
<Range>  
<Start>0</Start>  
<End>1024</End>  
</Range>  
<Range>  
<Start>2048</Start>  
<End>65535</End>  
</Range>  
</Ranges>  

请注意,已在未对齐的空间中 768-1024 和 2048-2304 位置写入了零。

Put Range共享快照不受支持,共享是共享的只读副本。 尝试对共享快照执行此操作失败,) 为 400 (InvalidQueryParameterValue。

请参阅