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

放置范围

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

协议可用性

已启用文件共享协议 可用
SMB Yes
NFS No

请求

可以按如下方式构建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 大小。 对于清除操作,范围最大可为文件的完整大小值。

文件服务仅接受一个字节范围,Rangex-ms-range并且必须采用以下格式指定字节范围: bytes=startByte-endByte

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

Content-MD5 标头设置为 x-ms-write 时,不允许使用 clear 标头。 如果该标头包含在请求中,文件服务将返回状态代码 400(错误请求)。
x-ms-write: { update ¦ clear } 必需。 必须指定以下选项之一:
  • update:将请求正文指定的字节写入指定的范围。 RangeContent-Length 标头必须匹配才能执行更新。
  • clear:清除指定的范围并释放该范围的存储中所使用的空间。 若要清除范围,请将 Content-Length 标头设置为零,并将Range 标头设置为一个指示要清除范围的值,该值可达最大文件大小。
x-ms-lease-id: <ID> 如果文件具有活动租约,则为必需。 可用于版本 2019-02-02 及更高版本。
x-ms-client-request-id 可选。 提供一个客户端生成的不透明值,该值包含 1 KiB 字符限制,在启用存储分析日志记录时记录在分析日志中。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅 监视 Azure Blob 存储
x-ms-file-last-write-time: { now ¦ preserve } 可选。 版本 2021-06-08 及更新版本。 可以指定以下选项之一:
  • now:默认值。 将上次写入时间时间戳更新到请求的时间。
  • preserve:保留现有上次写入时间戳不变。

请求正文

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

示例请求:更新字节范围

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。 有关详细信息,请参阅 标头中Date-Time值的表示形式。 修改共享或者其属性或元数据的任何操作将更新上次修改时间。 对文件执行的操作不会影响共享的上次修改时间。
Content-MD5 返回此标头是为了客户端可以检查消息内容完整性。 此标头的值由文件服务计算;它不一定是请求标头中事先指定的同一值。
x-ms-request-id 此标头唯一地标识发出的请求,并且可用于解决请求问题。 有关详细信息,请参阅 API 操作疑难解答
x-ms-version 指示用于执行请求的文件服务的版本。
Date 服务生成的 UTC 日期/时间值指示启动响应的时间。
x-ms-request-server-encrypted: { true ¦ false } 版本 2017-04-17 或更高版本。 The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise.
x-ms-client-request-id 此标头可用于对请求和相应的响应进行故障排除。 如果此标头存在于请求中并且该值最多为 1024 个可见 ASCII 字符, x-ms-client-request-id 则此标头的值等于标头的值。 如果请求中不存在标头 x-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操作不会对指定的 x-ms-range 值利用此功能。 Put Range需要对整个文件的写入访问权限。 这也意味着,如果 SMB 客户端对文件中的任何范围拥有锁,则Put Range将会失败。 有关详细信息,请参阅 管理文件锁

SMB 客户端目录更改通知

SMB 协议支持 FindFirstChangeNotification API 函数,允许应用程序检测文件系统中发生更改的时间。 它可以检测文件或目录何时添加、更改、删除,以及文件大小、属性或安全描述符发生更改的时间。 当文件或目录发生更改时,使用此 API 的 SMB 客户端将不会通过文件服务 REST API 接收通知。 但是,其他 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) 。

另请参阅