從 URL 複製 Blob

Put Blob From URL 作業會建立新的區塊 Blob,其中 Blob 的內容是從指定的 URL 讀取。 此 API 自 2020-04-08 版起提供。

不支援部分更新 Put Blob From URL。 現有 Blob 的內容會以新 Blob 的內容覆寫。 若要使用來源 URL 對區塊 Blob 的內容執行部分更新,請使用 Put Blob From URL API 搭配 Put Block List使用 。

來源 Blob 的大小上限為 256 個 mebibytes (MiB) 。

要求

您可以依照下列方式建構 Put Blob From URL 。 建議您使用 HTTPS。 以記憶體帳戶名稱取代 myaccount

PUT 方法要求 URI HTTP 版本
https://myaccount.blob.core.windows.net/mycontainer/myblob HTTP/1.1

模擬記憶體服務要求

當您對模擬記憶體服務提出要求時,請將模擬器主機名和 Blob 服務埠指定為 127.0.0.1:10000,後面接著仿真的記憶體帳戶名稱:

PUT 方法要求 URI HTTP 版本
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob HTTP/1.1

記憶體模擬器僅支援最多 2 GB 的 Blob 大小, (GiB) 。

如需詳細資訊,請參閱使用 Azure 模擬器進行本機 Azure 儲存體開發

URI 參數

您可以在要求 URI 上指定下列其他參數:

參數 描述
timeout 選擇性。 timeout 參數以秒為單位。 如需詳細資訊,請參閱 設定 Blob 服務作業的逾時

要求標頭

下表說明必要的和選擇性要求標頭:

要求標頭 描述
Authorization 必要。 指定授權配置、帳戶名稱和簽章。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
Datex-ms-date 必要。 指定要求的「國際標準時間」(UTC)。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
x-ms-version 所有授權要求都需要。 指定用於這個要求的作業版本。 如需詳細資訊,請參閱 Azure 儲存體服務的版本
Content-Length 必要。 指定要求主體中所傳輸的位元組數目。 這個標頭的值必須設定為 0。 長度不是 0 時,作業會失敗,狀態代碼為 400 (錯誤要求) 。
x-ms-copy-source:name 必要。 指定來源 Blob 的 URL。 此值可以是最多 2 個 kibibytes 的 URL, (KiB) 指定 Blob。 此值應該像出現在要求 URI 中一樣以 URL 編碼。 來源 Blob 必須是公用或透過共用存取簽章獲得授權。 如果來源 Blob 是公用的,則不需要授權才能執行作業。 如果來源 Blob 的大小大於 256 MiB,或來源未傳回有效 Content-Length 值,則要求會失敗,狀態代碼為 409 (Conflict) 。 以下是來源物件 URL 的一些範例:

- 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>
x-ms-copy-source-authorization: <scheme> <signature> 選擇性。 指定複製來源的授權配置和簽章。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
Azure Active Directory 僅支援配置持有人。
2020-10-02 版和更新版本支援此標頭。
x-ms-blob-type: BlockBlob 必要。 指定要建立的 Blob 類型,必須是 BlockBlob。 如果 Blob 類型不是 BlockBlob,作業會失敗,狀態代碼為 400 (不正確的要求) 。
Content-Type 選擇性。 Blob 的 MIME 內容類型。 預設類型為 application/octet-stream
Content-Encoding 選擇性。 指定已套用至 Blob 的內容編碼。 當 取得 Blob 作業在 Blob 資源上執行時,這個值會傳回給用戶端。 傳回此值時,用戶端可以使用它來譯碼 Blob 內容。
Content-Language 選擇性。 指定此資源所使用的自然語言。
Cache-Control 選擇性。 Blob 記憶體會儲存此值,但不會使用或修改此值。
x-ms-source-content-md5 選擇性。 來自 URI 之 Blob 內容的 MD5 哈希。 此哈希可用來驗證從 URI 傳輸數據期間 Blob 的完整性。 指定此標頭時,記憶體服務會比較從複製來源抵達的內容哈希與這個標頭值。 如果省略此標頭,Blob 記憶體會產生 MD5 哈希。

如果兩個哈希不相符,作業會失敗,錯誤碼為 400 (不正確的要求) 。
x-ms-content-crc64 選擇性。 Blob 內容的 CRC64 哈希。 在傳輸期間,此雜湊可用來驗證 Blob 的完整性。 指定此標頭時,記憶體服務會檢查已針對已傳送的哈希。 如果兩個哈希不相符,作業會失敗,錯誤碼為 400 (不正確的要求) 。 02-02-2019 版和更新版本支援此標頭。

如果同時存在 Content-MD5 和 x-ms-content-crc64 標頭,要求就會失敗,並出現 400 (不正確的要求) 。
x-ms-blob-content-type 選擇性。 設定 Blob 的內容類型。
x-ms-blob-content-encoding 選擇性。 設定 Blob 的內容編碼。
x-ms-blob-content-language 選擇性。 設定 Blob 的內容語言。
x-ms-blob-content-md5 選擇性。 設定 Blob 的 MD5 雜湊。
x-ms-blob-cache-control 選擇性。 設定 Blob 的快取控制。
x-ms-meta-name:value 選擇性。 與 Blob 建立關聯的名稱/值組作為元數據。

注意:自 2009-09-19 版起,元數據名稱必須遵守 C# 識別碼的命名規則。
x-ms-encryption-scope 選擇性。 用來加密要求內容的加密範圍。 2019-02-02 版和更新版本支援此標頭。
x-ms-tags 選擇性。 在 Blob 上設定指定的查詢字串編碼標記。 如需詳細資訊,請移至 節。 2019-12-12 版和更新版本支援。
x-ms-copy-source-tag-option 選擇性。 可能的值為 REPLACE 或 COPY (區分大小寫的) 。 預設值為 REPLACE。

如果指定 COPY,來源 Blob 中的標記會複製到目的地 Blob。 來源 Blob 必須是私人的,而且要求必須具有在來源 Blob 上 取得 Blob 卷標的 許可權,以及在目的地 Blob 上設定 Blob 卷標 。 這會產生來源帳戶上 取得 Blob 標記 作業的額外呼叫。

REPLACE 會設定目的地 Blob 上標頭所 x-ms-tags 指定的標記。 如果使用 REPLACE,且未指定 x-ms-tags標記,則目的地 Blob 上不會設定任何標記。 指定 COPY 併 x-ms-tags 產生 409 (衝突) 。

2021-04-10 版和更新版本支援。
x-ms-source-if-modified-since 選擇性。 DateTime 值。 只有在來源 Blob 自指定的日期/時間以來已經過修改時,才指定此條件式標頭來放置 Blob。 如果來源 Blob 尚未修改,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 如果來源是 Azure 檔案儲存體 共用,則無法指定此標頭。
x-ms-source-if-unmodified-since 選擇性。 DateTime 值。 只有在來源 Blob 自指定的日期/時間之後尚未修改時,才指定此條件式標頭來放置 Blob。 如果來源 Blob 已修改,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 如果來源是 Azure 檔案儲存體 共用,則無法指定此標頭。
x-ms-source-if-match 選擇性。 ETag 值。 指定這個條件式標頭,只有當其 ETag 符合指定的值時,才會放置來源 Blob。 如果 ETag 值不相符,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 如果來源是 Azure 檔案儲存體 共用,則無法指定此標頭。
x-ms-source-if-none-match 選擇性。 ETag 值。 指定此條件式標頭,使其 ETag 不符合指定的值時,才放置 Blob。 如果值相同,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 如果來源是 Azure 檔案儲存體 共用,則無法指定此標頭。
If-Modified-Since 選擇性。 DateTime 值。 指定這個條件式標頭,只有在目的地 Blob 自指定的日期/時間以來已經過修改時,才會放置 Blob。 如果目的地 Blob 尚未修改,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。
If-Unmodified-Since 選擇性。 DateTime 值。 只有在目的地 Blob 自指定的日期/時間之後尚未修改時,才指定此條件式標頭來放置 Blob。 如果目的地 Blob 已修改,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。
If-Match 選擇性。 ETag 值。 指定此條件式標頭的 ETag 值,只有當指定的 ETag 值符合現有目的地 Blob 的值時, ETag 才會放置 Blob。 如果目的地 Blob 的 ETag 不符合指定的 If-MatchETag,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。
If-None-Match 選擇性。 ETag 值,或萬用字元 (*)。

指定此條件式標頭的 ETag 值,只有在指定的 ETag 值不符合目的地 Blob 的 ETag 值時,才會放置 Blob。

指定通配符 (*) ,只有在目的地 Blob 不存在時,才能執行作業。

如果不符合指定的條件,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。
x-ms-lease-id:<ID> 如果 Blob 具有作用中租用,則為必要項目。 若要在具有作用中租用的 Blob 執行這項作業,請指定此標頭的有效租用識別碼。
x-ms-blob-content-disposition 選擇性。 設定 Blob 的 Content-Disposition 標頭。 適用於 2013-08-15 版和更新版本。

響應 Content-Disposition 標頭欄位會傳達如何處理響應承載的其他資訊,並可用來附加其他元數據。 例如,如果標頭設定為 attachment,表示使用者代理程式不應該顯示回應。 相反地,它應該會顯示具有指定 Blob 名稱以外的檔名的 [另存新檔] 對話方塊。

取得 Blob取得 Blob 屬性作業的content-disposition回應包含標頭。
Origin 選擇性。 指定發出要求的來源。 此標頭的顯示會導致在回應上跨原始資源共用 (CORS) 標頭。 如需詳細資訊,請參閱 Azure 記憶體服務的 CORS 支援
x-ms-client-request-id 選擇性。 提供客戶端產生的不透明值,並在啟用記憶體分析記錄時,提供 1 kibibyte (KiB) 字元限制。 強烈建議您使用此標頭,將用戶端活動與伺服器接收的要求相互關聯。
x-ms-access-tier 選擇性。 指出在 Blob 上設定的階層。 區塊 Blob 層Hot的有效值為、 CoolColdArchive注意Cold 2021-12-02 版和更新版本支持階層。 HotArchive 2018-11-09 版和更新版本支援、 Cool和 。 如需區塊 Blob 階層處理的詳細資訊,請參閱 經常性存取、非經常性存取和封存儲存層
x-ms-expiry-option 選擇性。 版本 2023-08-03 和更新版本。 指定要求的到期日選項。 如需詳細資訊,請參閱 ExpiryOption。 此標頭適用於已啟用階層命名空間的帳戶。
x-ms-expiry-time 選擇性。 版本 2023-08-03 和更新版本。 指定 Blob 設定為到期的時間。 到期日的格式會根據 x-ms-expiry-option而有所不同。 如需詳細資訊,請參閱 ExpiryOption。 此標頭適用於已啟用階層命名空間的帳戶。

只有在符合特定條件時,此作業也支援使用條件標頭來寫入 Blob。 如需詳細資訊,請參閱 指定 Blob 記憶體作業的條件式標頭

要求標頭 (客戶提供的加密金鑰)

下列標頭可以在要求上指定,以使用客戶提供的密鑰加密 Blob。 使用客戶提供的金鑰進行加密 (,而對應的標頭集) 是選擇性的。

要求標頭 描述
x-ms-encryption-key 必要。 Base64 編碼的 AES-256 加密金鑰。
x-ms-encryption-key-sha256 必要。 加密金鑰的Base64編碼SHA256哈希。
x-ms-encryption-algorithm: AES256 必要。 指定要用於加密的演算法。 此標頭的值必須設定為 AES256

要求本文

無。

範例要求

下列範例顯示建立區塊 Blob 的要求:

Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblockblob HTTP/1.1  
  
Request Headers:  
x-ms-version: 2020-04-08  
x-ms-date: <date>  
Content-Type: text/plain; charset=UTF-8  
x-ms-blob-content-disposition: attachment; filename="fname.ext"  
x-ms-blob-type: BlockBlob  
x-ms-meta-m1: v1  
x-ms-meta-m2: v2  
x-ms-copy-source: https://myaccount.blob.core.windows.net/mycontainer/myblob
x-ms-expiry-option: RelativeToNow
x-ms-expiry-time: 30000
Authorization: SharedKey myaccount:YhuFJjN4fAR8/AmBrqBz7MG2uFinQ4rkh4dscbj598g=  
Content-Length: 0

回應

回應包括 HTTP 狀態碼和一組回應標頭。

狀態碼

成功的作業會傳回狀態碼「201 (已建立)」。

如需狀態代碼的詳細資訊,請參閱 狀態和錯誤碼

回應標頭

這項作業的回應包括下列標頭。 回應也可能包括其他標準 HTTP 標頭。 所有標準標頭都符合 HTTP/1.1 通訊協議規格

回應標頭 描述
ETag ETag 包含用戶端使用 PUT 要求標頭執行條件式 If-Match 作業所使用的值。 ETag 值會以引號括住。
Last-Modified 上次修改 Blob 的日期/時間。 日期格式會依照 RFC 1123。 如需詳細資訊,請參閱 在標頭中代表日期/時間值

Blob 上的任何寫入作業 (包括 Blob 的中繼資料或屬性更新) 都會變更 Blob 的上次修改時間。
Content-MD5 針對區塊 Blob 傳回,讓用戶端可以檢查訊息內容的完整性。 傳 Content-MD5 回的值是由 Blob 記憶體計算。 即使要求不包含 Content-MD5x-ms-blob-content-md5 標頭,也會傳回此標頭。
x-ms-content-crc64 針對區塊 Blob 傳回,讓用戶端可以檢查訊息內容的完整性。 傳 x-ms-content-crc64 回的值是由 Blob 記憶體計算。 此標頭一律會傳回。
x-ms-request-id 可唯一識別提出的要求,而且您可以使用它對要求進行疑難解答。 如需詳細資訊,請參閱 針對 API 作業進行疑難解答
x-ms-version 用來執行要求的 Blob 記憶體版本。
Date 服務所產生的 UTC 日期/時間值,表示起始響應的時間。
Access-Control-Allow-Origin 如果要求包含 Origin 標頭,並啟用 CORS 及比對規則,則傳回此標頭。 如果相符,此標頭會傳回原始要求標頭的值。
Access-Control-Expose-Headers 如果要求包含 Origin 標頭,並啟用 CORS 及比對規則,則傳回此標頭。 傳回向要求的用戶端或簽發者公開的回應標頭清單。
Access-Control-Allow-Credentials 如果要求包含 Origin 標頭且已啟用 CORS,且符合的規則不允許所有來源,則傳回 。 這個標頭設定為 true
x-ms-request-server-encrypted: true/false 如果指定的演算法成功加密要求的內容,此標頭的值會設定為 true 。 否則,會將值設定為 false
x-ms-encryption-key-sha256 如果要求使用客戶提供的金鑰進行加密,則傳回 ,如此用戶端就可以使用提供的密鑰,確保要求的內容已成功加密。
x-ms-encryption-scope 如果要求使用加密範圍,則傳回 ,因此用戶端可以使用加密範圍確保要求的內容已成功加密。
x-ms-version-id: <DateTime> 傳回可唯一識別 Blob 的不透明 DateTime 值。 此標頭的值表示 Blob 的版本,而且可用於後續要求來存取 Blob。

回應本文

無。

範例回應

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
Transfer-Encoding: chunked  
Content-MD5: sQqNsWTgdUEFt6mb5y4/5Q==  
x-ms-content-crc64: 77uWZTolTHU
Date: <date>  
ETag: "0x8CB171BA9E94B0B"  
Last-Modified: <date>  
Access-Control-Allow-Origin: http://contoso.com  
Access-Control-Expose-Headers: Content-MD5  
Access-Control-Allow-Credentials: True  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-version-id: <DateTime>  

授權

在 Azure 記憶體中呼叫任何數據存取作業時,需要授權。 您可以授權 Put Blob From URL 作業,如下所述。

如果要求指定具有要求標頭的 x-ms-tags 標記,呼叫端必須符合 設定 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 使用者、群組或服務主體呼叫Put Blob From URL作業所需的 RBAC 動作,以及包含此動作的最低特殊許可權內建 Azure RBAC 角色:

若要深入瞭解如何使用 Azure RBAC 指派角色,請參閱 指派 Azure 角色以存取 Blob 數據

備註

自 2020-04-08 版起,支援 Put Blob From URL 此作業。

在 2020-10-02 版和更新版本中,複製作業的來源支援 Azure Active Directory 授權。

來源 Blob 可以是任何類型的,包括區塊 Blob、附加 Blob 或分頁 Blob。 不過,目的地 Blob 必須是區塊 Blob。

下表說明依服務版本允許的區塊和 Blob 大小上限:

版本 透過 Put Blob From URL) 的區塊大小上限 ( 透過) 的 Put Block List Blob 大小上限 ( 透過單一寫入作業的 Blob 大小上限 () Put Blob From URL
版本 2020-04-08 和更新版本 4,000 MiB 大約 190.7 個區塊 (TiB) (4,000 MiB × 50,000 個區塊) 5,000 MiB
2020-04-08 之前的版本 100 MiB 大約 4.75 TiB (100 MiB × 50,000 個區塊) 256 MiB

作業 Put Blob From URL 一律會複製整個來源 Blob。 不支援複製位元組範圍或一組區塊。 若要執行部分更新,請參閱 Put Block From URL。 目的地 Blob 可以是現有的區塊 Blob,也可以是作業所建立的新 Blob。

當您使用區塊 Blob 做為來源物件時,會複製所有認可的 Blob 內容。 不過,不會保留區塊清單,也不會複製未認可的區塊。 目的地 Blob 的內容與來源的內容相同,但不會保留認可的區塊清單。

放置 Blob 屬性和元數據

當您從複製來源建立區塊 Blob 時,預設會從來源 Blob 複製標準 Blob 屬性。 如果在要求中指定應用程式元數據,則會儲存它,而不複製來源 Blob 元數據。 若要明確設定任何 HTTP 內容標頭,您可以在要求中指定對應的標頭。

  • Content-Type

  • Content-Encoding

  • Content-Length

  • Cache-Control

  • Content-Disposition

目的地 Blob 的大小一律符合來源 Blob 的大小。 Content-Length標頭必須是要求 (中的 Put Blob From URL 0,因為沒有要求本文) ,而且目的地 Blob 的內容長度屬性是從來源的大小推斷。

放置 Blob From URL 自定義屬性

Put Blob From Url 遵循與設定與標準 HTTP 標頭相關聯的自訂屬性相同的語意 Put Blob 。 如需詳細資訊,請參閱 Blob 自定義屬性

Blob 索引標籤

如果在標頭中提供目的地 Blob 的 x-ms-tags 標籤,則必須進行查詢字串編碼。 標記索引鍵和值必須符合 中指定的 Set Blob Tags命名和長度需求。 此外, x-ms-tags 標頭最多可以包含 2 KiB 的標籤。 如果需要更多標籤,請使用 Set Blob Tags 作業。

如果未在 x-ms-tags 標頭中提供標籤,則不會從來源 Blob 複製標記。

加密範圍和客戶提供的金鑰

Put Blob From URL API 分別使用 和 x-ms-encryption-key 標頭,支援加密範圍和客戶提供的密鑰x-ms-encryption-scope

x-ms-copy-source如果標頭參考與要求 URI 中目的地 Blob 相同的來源 Blob,作業Put Blob From URL會執行 Blob 的同步就地重寫。 這可讓重寫 Blob 以使用不同的加密金鑰或加密範圍。

計費

定價要求可能源自使用 Blob 記憶體 API 的用戶端,無論是直接透過 Blob 記憶體 REST API,還是來自 Azure 記憶體用戶端連結庫。 這些要求會累算每個交易的費用。 交易類型會影響帳戶的收費方式。 例如,讀取交易會累算到與寫入交易不同的計費類別。 下表顯示根據記憶體帳戶類型的要求計費類別 Put Blob From URL

作業 儲存體帳戶類型 計費類別
將 Blob From URL (目的地帳戶1) 進階區塊 Blob
標準一般用途 v2
標準一般用途 v1
寫入作業
將 Blob From URL (來源帳戶2) 進階區塊 Blob
標準一般用途 v2
標準一般用途 v1
讀取作業

1目的地帳戶會支付一筆交易來起始寫入的費用。
2來源帳戶會對來源物件的每個讀取要求產生一筆交易。

此外,如果來源和目的地帳戶位於不同的區域 (例如美國北部和美國南部) ,則用來傳輸要求的頻寬會以輸出方式向來源記憶體帳戶收費。 相同地區的帳戶之間其輸出為免費。

最後,在相同記憶體帳戶內建立具有不同名稱的新 Blob 會使用額外的記憶體資源,因此作業會對這些額外資源的記憶體帳戶容量使用量收費。

若要瞭解指定計費類別的定價,請參閱 Azure Blob 儲存體 定價

另請參閱

授權對 Azure 記憶體狀態和錯誤碼Blob 服務錯誤碼的要求設定 Blob 服務作業的逾時