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

获取 Blob

Get Blob 操作从系统读取或下载 Blob,包括其元数据和属性。 也可以调用Get Blob 读取快照。

请求

可以按如下所示构造 Get Blob 请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称:

GET 方法请求 URI HTTP 版本
https://myaccount.blob.core.windows.net/mycontainer/myblob

https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>

https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime>

HTTP/1.0

HTTP/1.1

模拟存储服务 URI

对模拟存储服务发出请求时,将模拟器主机名和Azure Blob 存储端口指定为 127.0.0.1:10000,后跟模拟的存储帐户名称:

GET 方法请求 URI HTTP 版本
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob HTTP/1.0

HTTP/1.1

有关详细信息,请参阅使用 Azure 存储模拟器进行开发和测试

URI 参数

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

参数 说明
snapshot 可选。 快照 参数是一个不透明的DateTime值,如果存在该参数,则指定要检索的 blob 快照。 有关使用 Blob 快照的详细信息,请参阅创建 blob 的快照
versionid 可选版本 2019-12-12 及更高版本。 参数 versionid 是一个不透明的 DateTime 值,如果存在,则指定要检索的 Blob 的版本。
timeout 可选。 timeout 参数以秒表示。 有关详细信息,请参阅 为 Blob 存储操作设置超时

请求标头

下表介绍必需的和可选的请求标头。

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求
Datex-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求
x-ms-version 对于所有已授权的请求是必需的。 匿名请求可选。 指定用于此请求的操作的版本。 如果对于匿名请求省略此标头,则服务将执行版本 2009-09-19 的请求。 有关详细信息,请参阅 Azure 存储服务的版本控制
Range 可选。 仅返回指定范围内的 Blob 字节。
x-ms-range 可选。 仅返回指定范围内的 Blob 字节。 如果指定了 Rangex-ms-range,服务将使用 x-ms-range 值。 如果未指定这两个范围,则返回整个 Blob 内容。 有关详细信息,请参阅 指定 Blob 存储操作的范围标头
x-ms-lease-id: <ID> 可选。 如果指定了此标头,则仅当满足以下两个条件时才执行该操作:

- Blob 的租约当前处于活动状态。
- 请求中指定的租约 ID 与 Blob 的租约 ID 匹配。

如果指定了此标头,但不符合上述任一条件,则请求失败, Get Blob 操作失败,状态代码为 412 (先决条件失败) 。
x-ms-range-get-content-md5: true 可选。 当此标头设置为 true 并连同 标头一起 Range 指定时,只要范围小于或等于 4 mb, (MiB) 大小,服务将返回该区域的 MD5 哈希。

如果在未指定标头的情况下 Range 指定标头,则服务将返回状态代码 400 (错误请求) 。

如果在范围超过 4 MiB 时标头设置为 true ,则服务返回状态代码 400 (错误请求) 。
x-ms-range-get-content-crc64: true 可选。 当此标头设置为 true 并连同 标头一起 Range 指定时,只要范围的大小小于或等于 4 MiB,服务将返回该区域的 CRC64 哈希。

如果在未指定标头的情况下 Range 指定标头,则服务将返回状态代码 400 (错误请求) 。

如果在范围超过 4 MiB 时标头设置为 true ,则服务返回状态代码 400 (错误请求) 。

如果 同时 x-ms-range-get-content-md5 存在 和 x-ms-range-get-content-crc64 标头,则请求将失败并显示 400 (错误请求) 。

2019-02-02 及更高版本中支持此标头。
Origin 可选。 指定从中发出请求的来源。 如果存在此标头,则会在响应中产生跨域资源共享 (CORS) 标头。
x-ms-client-request-id 可选。 提供客户端生成的不透明值, (KiB) 字符限制,在启用存储分析日志记录时记录在分析日志中。 强烈建议在将客户端活动与服务器接收的请求相关联时使用此标头。 有关详细信息,请参阅关于 Azure 存储分析日志记录

此操作还支持使用条件标头,以便在符合指定条件时才读取 Blob。 有关详细信息,请参阅 为 Blob 存储操作指定条件标头

请求标头 (客户提供的加密密钥)

从版本 2019-02-02 开始,可以在请求中指定以下标头,以读取使用客户提供的密钥加密的 Blob。 使用客户提供的密钥 (和相应的一组标头) 进行加密是可选的。 如果 Blob 以前已使用客户提供的密钥进行加密,则必须在请求中包含这些标头才能成功完成读取操作。

请求标头 说明
x-ms-encryption-key 必需。 Base64 编码的 AES-256 加密密钥。
x-ms-encryption-key-sha256 可选。 加密密钥的 Base64 编码 SHA256 哈希。
x-ms-encryption-algorithm: AES256 必需。 指定要用于加密的算法。 此标头的值必须为 AES256

请求正文

无。

响应

响应包括 HTTP 状态代码、一组响应标头和响应正文,响应正文包含 Blob 内容。

状态代码

读取完整 Blob 的操作若成功,将返回状态代码 200(正常)。

读取指定范围的操作若成功,则返回状态代码 206 (Partial Content)。

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

响应头

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

语法 说明
Last-Modified 上次修改 Blob 的日期/时间。 日期格式遵循 RFC 1123。

任何修改 Blob 的操作(包括 Blob 元数据或属性更新)都会更改 Blob 的上次修改时间。
x-ms-creation-time 版本 2017-11-09 及更高版本。 创建 Blob 的日期/时间。 日期格式遵循 RFC 1123。
x-ms-meta-name:value 作为用户定义的元数据与此 Blob 关联的一组名称/值对。
x-ms-tag-count 版本 2019-12-12 及更高版本。 如果 Blob 具有任何标记,则此标头将返回 Blob 上存储的标记数。 如果 Blob 上没有标记,则不会返回标头。
Content-Length 响应正文中存在的字节数。
Content-Type 为 Blob 指定的内容类型。 默认内容类型为 application/octet-stream
Content-Range 指示客户端通过设置请求标头请求 Blob 子集时返回的 Range 字节范围。
ETag 包含可用于有条件地执行操作的值。 有关详细信息,请参阅 为 Blob 存储操作指定条件标头。 如果请求版本为 2011-08-18 或更高版本,则 ETag 值用引号引起来。
Content-MD5 如果 Blob 有 MD5 哈希并且此Get Blob 操作读取完整 Blob,则返回此响应标头,以便客户端检查消息内容完整性。

在版本 2012-02-12 及更高版本中, Put Blob 设置块 Blob 的 MD5 哈希值, Put Blob 即使请求不包含 MD5 标头也是如此。

如果请求要读取指定范围,并且 x-ms-range-get-content-md5 设置为 true,则只要范围大小小于或等于 4 MiB,请求将返回该范围的 MD5 哈希。

如果这两组条件 true都不是 ,则不会为 Content-MD5 标头返回任何值。

如果不带 x-ms-range-get-content-md5 标头指定 Range,服务将返回状态码 400(错误请求)。

如果 x-ms-range-get-content-md5 当范围超过 4 MiB 时设置为 true ,则服务返回状态代码 400 (错误请求) 。
x-ms-content-crc64 如果请求要读取指定范围,并且 x-ms-range-get-content-crc64 设置为 true,则只要范围大小小于或等于 4 MiB,请求将返回该区域的 CRC64 哈希。

如果不带 x-ms-range-get-content-crc64 标头指定 Range,服务将返回状态码 400(错误请求)。

如果 x-ms-range-get-content-crc64 当范围超过 4 MiB 时设置为 true ,则服务返回状态代码 400 (错误请求) 。
Content-Encoding 返回为 Content-Encoding 请求标头指定的值。
Content-Language 返回为 Content-Language 请求标头指定的值。
Cache-Control 如果以前为 Blob 指定了标头,则返回 。
Content-Disposition 针对版本 2013-08-15 和更高版本的请求将返回此标头。 此标头返回为 x-ms-blob-content-disposition 标头指定的值。

响应 Content-Disposition 标头字段传达有关如何处理响应有效负载的其他信息,并可用于附加其他元数据。 例如,如果 标头设置为 attachment,则表示用户代理不应显示响应。 相反,它显示一个“另存为”对话框,其文件名不是指定的 Blob 名称。
x-ms-blob-sequence-number 页 Blob 的当前序列号。

块 Blob 或追加 Blob 不会返回此标头。
x-ms-blob-type: <BlockBlob | PageBlob | AppendBlob> 返回 Blob 的类型。
x-ms-copy-completion-time: <datetime> 版本 2012-02-12 及更高版本。 上次尝试 Copy Blob 的操作的结束时间,其中此 Blob 是目标 Blob。 该值可以指定已完成、已中止或失败的复制尝试时间。 如果副本处于挂起状态、如果此 Blob 从未成为操作中Copy Blob的目标,或者此 Blob 在使用 Set Blob PropertiesPut BlobPut Block List的结束Copy Blob操作后修改,则不会显示此标头。
x-ms-copy-status-description: <error string> 版本 2012-02-12 及更高版本。 仅当 为 failedpending时才x-ms-copy-status显示。 说明上次严重或不严重的复制操作故障的原因。 如果此 Blob 从未成为操作中Copy Blob的目标,或者在使用 Set Blob Properties、 或 Put Block List的结束Copy Blob操作后修改了此 Blob,Put Blob则不会显示此标头。
x-ms-copy-id: <id> 版本 2012-02-12 及更高版本。 上次尝试 Copy Blob 的操作的字符串标识符,其中此 Blob 是目标 Blob。 如果此 Blob 从未成为操作中Copy Blob的目标,或者在使用 Set Blob Properties、 或 Put Block List的结束Copy Blob操作后修改了此 Blob,Put Blob则不会显示此标头。
x-ms-copy-progress: <bytes copied/bytes total> 版本 2012-02-12 及更高版本。 包含上次尝试 Copy Blob 的操作中复制的字节数和源中的总字节数,其中此 Blob 是目标 Blob。 它可以显示从 0 到 Content-Length 复制的字节数。 如果此 Blob 从未成为操作中Copy Blob的目标,或者在使用 Set Blob Properties、 或 Put Block List的结束Copy Blob操作后修改了此 Blob,Put Blob则不会显示此标头。
x-ms-copy-source: url 版本 2012-02-12 及更高版本。 长度最大为 2 KiB 的 URL,指定在上次尝试 Copy Blob 的操作中使用的源 Blob 或文件,其中此 Blob 是目标 Blob。 如果此 Blob 从未成为操作中Copy Blob的目标,或者在使用 Set Blob Properties、 或 Put Block List的结束Copy Blob操作后修改了此 Blob,Put Blob则不会显示此标头。

此标头中返回的 URL 包含源 Blob 上的复制操作中使用的任何请求参数,包括用于访问源 blob 的共享访问签名 (SAS) 令牌。
x-ms-copy-status: <pending | success | aborted | failed> 版本 2012-02-12 及更高版本。 由 x-ms-copy-id 标识的复制操作的状态,具有以下值:

- success:复制已成功完成。
- pending:复制正在进行。 检查 x-ms-copy-status-description 间歇性、非严重错误是否减慢了复制进度,但不会导致失败。
- aborted:复制已由 Abort Copy Blob结束。
- failed:复制失败。 有关失败详细信息,请参阅 x-ms-copy-status-description。

如果此 Blob 从未成为操作中Copy Blob的目标,或者在使用 Set Blob Properties、 或 Put Block List的已完成Copy Blob操作后修改了此 Blob,Put Blob则不会显示此标头。
x-ms-lease-duration: <infinite | fixed> 版本 2012-02-12 及更高版本。 在租用 Blob 时,指定租约是无限期还是固定时间。
x-ms-lease-state: <available | leased | expired | breaking | broken> 版本 2012-02-12 及更高版本。 Blob 的租用状态。
x-ms-lease-status:<locked | unlocked> Blob 的当前租约状态。
x-ms-request-id 唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作疑难解答
x-ms-version 指示用于执行请求的 Blob 存储版本。 包含在使用版本 2009-09-19 及更高版本发出的请求中。

如果使用 Blob 存储版本 2009-09-19 将容器标记为公共访问,则对于没有指定版本的匿名请求也会返回此标头。
Accept-Ranges: bytes 指示服务支持针对部分 Blob 内容的请求。 对于使用版本 2011-08-18 及更高版本发出的请求,以及 SDK 版本 1.6 及更高版本中的本地存储服务,均包含。
Date 由服务生成的 UTC 日期/时间值,指示启动响应的时间。
Access-Control-Allow-Origin 如果请求包含 Origin 标头并且通过匹配的规则启用了 CORS,则返回此标头。 如果存在匹配项,此标头返回原始请求标头的值。
Access-Control-Expose-Headers 如果请求包含 Origin 标头并且通过匹配的规则启用了 CORS,则返回此标头。 返回将向客户端或请求的发出方公开的响应标头的列表。
Vary 如果指定了 CORS 规则,则随 Origin 标头的值一起返回此标头。 有关详细信息 ,请参阅对 Azure 存储服务的 CORS 支持
Access-Control-Allow-Credentials 如果请求包含标头 Origin ,并且启用了 CORS,并且启用了不允许所有源的匹配规则,则返回 。 此标头将设置为 true
x-ms-blob-committed-block-count Blob 中存在的已提交块数。 仅对追加 Blob 返回此标头。
x-ms-server-encrypted: true/false 版本 2015-12-11 及更高版本。 如果使用指定的算法完全加密 Blob 数据和应用程序元数据,则此标头的值设置为 true 。 否则,当 blob 未加密或仅加密部分 blob 或应用程序元数据) 时,该值设置为 false (。
x-ms-encryption-key-sha256 版本 2019-02-02 及更高版本。 如果使用客户提供的密钥加密 Blob,则返回此标头。
x-ms-encryption-context 版本 2021-08-06 及更高版本。 如果设置了加密上下文属性值,它将返回设置的值。 仅当为帐户启用分层命名空间时有效。
x-ms-encryption-scope 版本 2019-02-02 及更高版本。 如果使用加密范围加密 Blob,则返回此标头。
x-ms-blob-content-md5 版本 2016-05-31 及更高版本。 如果 blob 具有 MD5 哈希,并且请求包含范围标头 (Range 或 x-ms-range) ,则返回此响应标头时会返回整个 blob 的 MD5 值的值。 此值不一定等于 Content-MD5 标头中返回的值,后者是从请求的范围计算得出的。
x-ms-client-request-id 可用于对请求和相应的响应进行故障排除。 如果请求中存在标头, x-ms-client-request-id 并且该值包含的可见 ASCII 字符不超过 1,024 个,则此标头的值等于标头的值。 x-ms-client-request-id如果请求中不存在标头,则响应中不存在此标头。
x-ms-last-access-time 版本 2020-02-10 及更高版本。 根据存储帐户的上次访问时间跟踪策略指示上次访问 Blob 数据的时间。 如果存储帐户没有上次访问时间跟踪策略,或者禁用策略,则不会返回 标头。 有关设置存储帐户的上次访问时间跟踪策略的信息,请参阅 Blob 服务 API
x-ms-blob-sealed 版本 2019-12-12 及更高版本。 仅针对追加 Blob 返回。 如果已密封追加 blob,则值为 true。 有关详细信息,请参阅 追加 Blob 密封
x-ms-immutability-policy-until-date 版本 2020-06-12 及更高版本。 指定在 Blob 上设置的保留 。 这是可以保护 Blob 不被修改或删除的日期。 仅当在 Blob 上设置了不可变性策略时返回。 此标头的值采用RFC1123格式。
x-ms-immutability-policy-mode: unlocked/locked 版本 2020-06-12 及更高版本。 如果在 Blob 上设置了不可变性策略,则返回 。 值为 unlockedlockedunlocked 指示用户可以通过增加或减少 保留期直到 日期来更改策略。 locked 指示禁止这些操作。
x-ms-legal-hold: true/false 版本 2020-06-12 及更高版本。 如果 Blob 上没有法定保留,则不会返回此标头。 如果 Blob 包含法定保留并且其值为 true,则此标头的值设置为 true 。 否则,如果 Blob 包含法定保留并且其值为 false,则该值设置为 false
x-ms-owner 版本 2020-06-12 及更高版本,仅适用于启用了分层命名空间的帐户。 返回文件或目录的所有者用户。
x-ms-group 版本 2020-06-12 及更高版本,仅适用于启用了分层命名空间的帐户。 返回文件或目录的拥有组。
x-ms-permissions 版本 2020-06-12 及更高版本,仅适用于启用了分层命名空间的帐户。 返回针对文件或目录的“用户”、“组”和“其他”设置的权限。 每个单独的权限采用 [r,w,x,-]{3} 格式。
x-ms-resource-type 版本 2020-10-02 及更高版本,仅适用于启用了分层命名空间的帐户。 返回路径的资源类型,可以是 filedirectory

响应正文

响应正文包含 Blob 内容。

示例响应

Status Response:  
HTTP/1.1 200 OK  
  
Response Headers:  
x-ms-blob-type: BlockBlob  
x-ms-lease-status: unlocked  
x-ms-lease-state: available  
x-ms-meta-m1: v1  
x-ms-meta-m2: v2  
Content-Length: 11  
Content-Type: text/plain; charset=UTF-8  
Date: <date>  
ETag: "0x8CB171DBEAD6A6B"  
Vary: Origin  
Last-Modified: <date>  
x-ms-version: 2015-02-21  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-copy-id: 36650d67-05c9-4a24-9a7d-a2213e53caf6  
x-ms-copy-source: <url>  
x-ms-copy-status: success  
x-ms-copy-progress: 11/11  
x-ms-copy-completion-time: <date>  
  

授权

在 Azure 存储中调用任何数据访问操作时,都需要授权。 可以授权操作, Get Blob 如下所述。

Azure 存储支持使用 Microsoft Entra ID 来授权对 Blob 数据的请求。 使用 Microsoft Entra ID,可以使用 Azure 基于角色的访问控制 (Azure RBAC) 向安全主体授予权限。 安全主体可以是用户、组、应用程序服务主体或 Azure 托管标识。 安全主体由 Microsoft Entra ID 进行身份验证,以返回 OAuth 2.0 令牌。 然后可以使用令牌来授权对 Blob 服务发出请求。

若要详细了解如何使用 Microsoft Entra ID 授权,请参阅使用 Microsoft Entra ID 授权访问 blob

权限

下面列出了Microsoft Entra用户、组或服务主体调用Get Blob操作所需的 RBAC 操作,以及包含此操作的最小特权内置 Azure RBAC 角色:

若要详细了解如何使用 Azure RBAC 分配角色,请参阅 分配 Azure 角色以访问 Blob 数据

注解

对于页 Blob,尚无内容或内容已清除的页面范围的Get Blob 操作对这些字节返回零。

如果在未指定范围的页 Blob 上调用 Get Blob ,则服务将返回页的范围,最大为标头的指定值 x-ms-blob-content-length 。 对于任何缺少内容的页面,服务将返回这些字节的零。

对于追加 Blob,该 Get Blob 操作返回 x-ms-blob-committed-block-count 标头。 此标头指示 Blob 中已提交的块数。 x-ms-blob-committed-block-count不会为块 Blob 或页 Blob 返回标头。

Get Blob每个 MiB 允许两分钟完成操作。 如果每个 MiB 操作花费的时间平均超过两分钟,则操作将超时。

检索属于私有容器的 Blob 需要 x-ms-version 标头。 如果 Blob 属于可用于完全或部分公共访问的容器,则任何客户端都可以读取它,而无需指定版本;检索属于公共容器的 Blob 不需要服务版本。 有关详细信息,请参阅限制对容器和 Blob 的访问

Get Blob对已存档块 Blob 执行的操作将失败。

复制操作

若要确定操作是否已Copy Blob完成,请首先检查,以确保x-ms-copy-id目标 Blob 的标头值与原始调用 Copy Blob提供的副本 ID 匹配。 匹配可确保另一个应用程序不会中止复制并启动新 Copy Blob 操作。 接下来,为 标头检查x-ms-copy-status: success。 但是,请注意,除 、 和 操作之外Lease,Blob 上的所有写入操作都将删除 Blob 中的所有x-ms-copy-*属性。Put BlockPut Page 使用早于 2012-02-12 的 Blob 存储版本的操作也不会复制 Copy Blob 这些属性。

警告

标头中 x-ms-copy-source 返回的 URL 包含源 blob 上的复制操作中使用的任何请求参数。 如果使用 SAS 令牌访问源 Blob,则当在目标 Blob 上调用 时Get Blob,该 SAS 令牌将显示在x-ms-copy-source标头中。

当响应中出现 x-ms-copy-status: failed 时,x-ms-copy-status-description 中包含有关Copy Blob 失败的详细信息。

下表描述了每个 x-ms-copy-status-description 值的三个字段:

组件 说明
HTTP 状态代码 一个指定失败的标准 3 位整数。
错误代码 描述错误的关键字 (keyword) ,该错误由 Azure 在 ErrorCode> 元素中<提供。 <如果未显示 ErrorCode> 元素,则使用包含与 HTTP 规范中的 3 位 HTTP 状态代码关联的标准错误文本的关键字 (keyword) 。 请参阅 常见 REST API 错误代码
信息 失败的详细说明,用引号括起来。

x-ms-copy-status下表描述了常见故障方案的 和 x-ms-copy-status-description 值:

重要

即使没有版本更改,此表中的错误说明也可能更改,因此它们可能与文本不完全匹配。

方案 x-ms-copy-status 值 x-ms-copy-status-description 值
已成功完成复制操作。 success empty
在完成之前,用户终止了复制操作。 已中止 empty
在复制操作期间从源 Blob 中读取时出现错误,但会重试该操作。 挂起 502 BadGateway“读取源时遇到可重试的错误。 将重试。 失败时间: <时间>”
在写入到复制操作的目标 Blob 时出现错误,但会重试该操作。 挂起 500 InternalServerError“遇到可重试的错误。 将重试。 失败时间: <时间>”
从复制操作的源 Blob 中读取时出现无法恢复的错误。 “失败” 404 ResourceNotFound“在读取源时复制失败”。

注意:当服务报告此基础错误时,它会在 元素中ErrorCode返回ResourceNotFound。 如果响应中未显示任何 ErrorCode 元素,则会显示 HTTP 状态的标准字符串表示形式,例如 NotFound
限制所有复制操作的超时时间已过。 (当前超时时间为 2 周。) “失败” 500 OperationCancelled“复制超过允许的最长时间”。
从源进行读取时,复制操作经常失败,并且未达到尝试与成功次数的最小比率。 (此超时可防止在失败) 前两周内重试非常差的源。 “失败” 500 OperationCancelled“在读取源时复制失败”。

x-ms-last-access-time 根据存储帐户的上次访问时间跟踪策略,跟踪访问 Blob 数据的时间。 访问 Blob 的元数据不会更改其上次访问时间。

计费

定价请求可以源自使用 Blob 存储 API 的客户端,可以直接通过 Blob 存储 REST API 或 Azure 存储客户端库。 这些请求按事务产生费用。 事务类型会影响帐户的计费方式。 例如,读取事务应计为与写入事务不同的计费类别。 下表显示了基于存储帐户类型的请求的计费类别 Get Blob

操作 存储帐户类型 计费类别
获取 Blob 高级块 blob
标准常规用途 v2
标准常规用途 v1
读取操作

若要了解指定计费类别的定价,请参阅Azure Blob 存储定价

另请参阅

授权对 Azure 存储的请求
状态和错误代码
Blob 存储错误代码
为 Blob 存储操作设置超时