銷售: 1-800-867-1380

複製 Blob (REST 應用程式開發介面)

更新日期: 2014年10月

Copy Blob 作業可將 Blob 複製到儲存體帳戶中的目的地。在 2012-02-12 版及更新版本中,Copy Blob 作業的來源可以是任何 Azure 儲存體帳戶中已認可的 Blob。

note附註
只有在 2012 年 6 月 7 日當天或之後所建立的儲存體帳戶,才可讓您在執行 Copy Blob 作業時從另一個儲存體帳戶進行複製。

Copy Blob 要求的建構如下。建議使用 HTTPS。請以您的儲存體帳戶名稱取代 myaccount,以您的容器名稱取代 mycontainer,並以您的目的地 Blob 名稱取代 myblob。從 2013-08-15 版開始,您可以為目的地 Blob 指定共用存取簽章。

 

  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

如需詳細資訊,請參閱使用儲存體模擬器執行 Azure 應用程式

您可以在要求的 URI 中指定下列其他參數。

 

參數 描述

timeout

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

下表描述必要的和選用的要求標頭。

 

要求標頭 描述

Authorization

必要項。指定驗證配置、帳戶名稱及簽章。如需詳細資訊,請參閱Windows Azure 儲存體服務的驗證

Datex-ms-date

必要項。指定要求的國際標準時間 (UTC)。如需詳細資訊,請參閱Windows Azure 儲存體服務的驗證

x-ms-version

所有已驗證要求的必要項。如需詳細資訊,請參閱為 Windows Azure 中的 Blob、佇列和表格服務進行版本設定

x-ms-meta-name:value

選擇性。指定與 Blob 相關聯之使用者定義的名稱/值組。如果未指定名稱/值組,這項作業會將來源 Blob 的中繼資料複製到目的地 Blob。如果指定了一個或多個名稱/值組,則會使用指定的中繼資料建立目的地 Blob,而不會從來源 Blob 複製中繼資料。

請注意,從 2009-09-19 版開始,中繼資料名稱必須遵守 C# 識別碼的命名規則。 如需詳細資訊,請參閱<命名和參考容器、Blob 及中繼資料>。

x-ms-source-if-modified-since

選擇性。DateTime 值。只有在指定日期/時間修改來源 Blob 時,才能指定此條件式標頭以複製 Blob。如果未修改來源 Blob,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

x-ms-source-if-unmodified-since

選擇性。DateTime 值。只有在非指定日期/時間修改來源 Blob 時,才能指定此條件式標頭以複製 Blob。如果已修改來源 Blob,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

x-ms-source-if-match

選擇性。ETag 值。只有當其 ETag 與指定的值相符時,才能指定此條件式標頭複製來源 Blob。如果 ETag 值不相符,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

x-ms-source-if-none-match

選擇性。ETag 值。只有當其 ETag 與指定的值不相符時,才能指定此條件式標頭複製 Blob。如果兩值完全相同,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

If-Modified-Since

選擇性。DateTime 值。只有在指定日期/時間修改目的地 Blob 時,才能指定此條件式標頭以複製 Blob。如果未修改目的地 Blob,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

If-Unmodified-Since

選擇性。DateTime 值。只有在非指定日期/時間修改目的地 Blob 時,才能指定此條件式標頭以複製 Blob。如果已修改目的地 Blob,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

If-Match

選擇性。ETag 值。只有在指定的 ETag 值符合現有目的地 Blob 的 ETag 值時,才能指定此條件式標頭的 ETag 值以複製 Blob。如果目的地 Blob 的 ETag 不符合 If-Match 所指定的 ETag,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

If-None-Match

選擇性。ETag 值,或萬用字元 (*)。

只有在指定的 ETag 值不符合目的地 Blob 的 ETag 值時,才能指定此條件式標頭的 ETag 值以複製 Blob。

只有在目的地 Blob 不存在時,才指定萬用字元 (*) 執行作業。

如果不符合指定的條件,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

x-ms-copy-source:name

必要項。指定來源 Blob 的名稱。

在 2012-02-12 版及更新版本中,此值為長度上限為 2 KB 並可指定 Blob 的 URL。相同帳戶中的來源 Blob 可以是私人的,不過,其他帳戶中的 Blob 必須是公開的,或接受包含在此 URL 的認證 (例如共用存取簽章)。只有在 2012 年 6 月 7 日當天或之後所建立的儲存體帳戶,才可讓您在執行 Copy Blob 作業時從另一個儲存體帳戶進行複製。Microsoft 建議盡可能使用 HTTPS。範例:

  • https://myaccount.blob.core.windows.net/mycontainer/myblob

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

在 2012-02-12 之前的版本中,只能複製同一個帳戶中的 Blob,且來源名稱會使用下列格式:

  • 具名容器中的 Blob:/accountName/containerName/blobName

  • 具名容器中的快照集:/accountName/containerName/blobName?snapshot=<DateTime>

  • 根容器中的 Blob:/accountName/blobName

  • 根容器中的快照集:/accountName/blobName?snapshot=<DateTime>

x-ms-lease-id:<ID>

如果目的地 Blob 為作用中租用,則為必要項目。為此標頭指定的租用識別碼必須符合目的地 Blob 的租用識別碼。如果要求不包含租用識別碼或無效,作業會失敗,並顯示狀態碼 412 (先決條件失敗)。

如果指定此標頭,但目的地 Blob 目前沒有作用中租用,作業也會失敗,並顯示狀態碼 412 (先決條件失敗)。

在 2012-02-12 版及更新版本中,此值必須替租用的 Blob 指定作用中且無限期的租用。有限期的租用識別碼會失敗,並顯示 412 (先決條件失敗)。

x-ms-source-lease-id: <ID>

選擇性,2012-02-12 之前的版本 (2012-02-12 版及更新版本不支援)。只有租用識別碼與作用中租用識別碼相符時,才能指定此標頭執行 Copy Blob 作業。

如果指定此標頭,但來源 Blob 目前沒有作用中租用,作業也會失敗,並顯示狀態碼 412 (先決條件失敗)。

x-ms-client-request-id

選擇性。提供由用戶端產生的不透明值 (具有 1 KB 的字元限制),當儲存體分析記錄為啟用狀態時,此值會記錄在分析記錄檔中。如果是和伺服器所接收的要求相關的用戶端活動,則強烈建議您使用此標頭。如需詳細資訊,請參閱關於儲存體分析記錄Windows Azure 記錄:使用記錄檔追蹤儲存體需求

無。

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

在 2012-02-12 版及更新版本中,成功的作業會傳回狀態碼「202 (已接受)」。

在 2012-02-12 之前的版本中,成功的作業會傳回狀態碼「201 (已建立)」。

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

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

 

回應標頭 描述

ETag

在 2012-02-12 版及更新版本中,如果複製完成,則會包含目的地 Blob 的 ETag。如果複製未完成,則會包含複製開始時所建立之空白 Blob 的 ETag。

在 2012-02-12 之前的版本中,會傳回目的地 Blob 的 ETag。

在 2011-08-18 版本及更新版本中,ETag 值的會加上引號。

Last-Modified

傳回目的地 Blob 複製作業完成的日期/時間。

x-ms-request-id

此標頭可唯一識別提出的要求,而且可用來進行要求的疑難排解。如需詳細資訊,請參閱對應用程式開發介面作業進行疑難排解

x-ms-version

指出用於執行要求的 Blob 服務版本。對 2009-09-19 及更新版本提出要求會傳回此標頭。

Date

服務產生的 UTC 日期/時間值,可指出啟動回應的時間。

x-ms-copy-id: <id>

2012-02-12 版及更新版本。此複製作業的字串識別碼。搭配使用 Get BlobGet Blob Properties 以檢查此複製作業的狀態,或傳遞給 Abort Copy Blob 以中止暫止的複製作業。

x-ms-copy-status: <success | pending>

2012-02-12 版及更新版本。複製作業的狀態,其值如下:

  • success:複製已順利完成。

  • pending:正在進行複製。

無。

以下是要求複製 Blob 的範例回應:

Response Status:
HTTP/1.1 202 Accepted
Response Headers: 
Last-Modified: Thu, 09 Feb 2012 23:30:19 GMT 
ETag: "0x8CEB669D794AFE2"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402
x-ms-version: 2012-02-12
x-ms-copy-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-copy-status: pending
Date: Thu, 09 Feb 2012 23:30:18 GMT

帳戶擁有者可呼叫這項作業。若為對 2013-08-15 及更新版本提出的要求,支援具有目的地 Blob 或其容器之寫入權限的共用存取簽章在相同的帳戶中執行複製作業。請注意,在要求上指定的共用存取簽章只會套用至目的地 Blob。請依照要求標頭 x-ms-copy-source 的詳細說明個別授與來源 Blob 的存取權。

在 2012-02-12 版及更新版本中,Copy Blob 作業會以非同步方式完成。這項作業會傳回可用來檢查或中止複製作業的複製識別碼。Blob 服務將盡全力複製 Blob。

複製作業的來源 Blob 可以是區塊 Blob 或分頁 Blob,或其中任何的一個快照集。如果目的地 Blob 已經存在,則必須使用與來源 Blob 相同的 Blob 類型。所有現有的目的地 Blob 都會被覆寫。複製作業進行時,無法修改目的地 Blob。

帳戶內多項暫止的 Copy Blob 作業可能會循序處理。目的地 Blob 只能有一個未處理的複製 Blob 作業。換句話說,Blob 不可以是多項暫止之 Copy Blob 作業的目的地。嘗試對已暫止複製的目的地 Blob 執行 Copy Blob 時會失敗,並顯示狀態碼 409 (衝突)。

只有在 2012 年 6 月 7 日當天或之後所建立的儲存體帳戶,才可讓您在執行 Copy Blob 作業時從另一個儲存體帳戶進行複製。嘗試從其他儲存體帳戶複製到 2012 年 6 月 7 日以前所建立的帳戶會失敗,並顯示狀態碼 400 (不正確的要求)。

Copy Blob 作業一律會複製整個來源 Blob,不支援複製位元組範圍或一組區塊。

Copy Blob 作業可採取下列任何一種形式:

  • 您可以將來源 Blob 複製到不同名稱的目的地 Blob。目的地 Blob 可以是相同 Blob 類型 (區塊或分頁) 的現有 Blob,也可以是複製作業所建立的新 Blob。

  • 您可以將來源 Blob 複製到相同名稱的目的地 Blob,有效地取代來源 Blob。這類複製作業會移除所有未認可的區塊,並覆寫 Blob 的中繼資料。

  • 您可以將快照集複製到其基底 Blob 之上。將快照集升級至基底 Blob 的位置,就可以還原舊版的 Blob。

  • 您可以將快照集複製到不同名稱的目的地 Blob。產生的目的地 Blob 是可寫入的 Blob,而不是快照集。

從分頁 Blob 複製時,Blob 服務會建立來源 Blob 長度 (一開始會全部包含零) 的目的地分頁 Blob。然後列舉來源頁面範圍,並複製非空白的範圍。從區塊 Blob 複製時,會複製所有認可的區塊及其區塊識別碼。不會複製未認可的區塊。若為區塊 Blob,Blob 服務會建立零長度的認可 Blob,再由此作業傳回。若為任何 Blob 類型,您可以針對目的地 Blob 呼叫 Get BlobGet Blob Properties,檢查複製作業的狀態。複製完成時,會認可最後的 Blob。

複製作業的來源提供 ETag 時,如果來源在複製進行中發生任何變更,將導致複製失敗。嘗試在複製進行中變更目的地 Blob 會失敗,並顯示 409 (衝突)。如果目的地 Blob 為無限期租用,必須將租用識別碼傳遞至 Copy Blob。不允許使用有限期的租用。

區塊 Blob 的 ETag 會在啟始 Copy Blob 作業及完成複製時變更。分頁 Blob 的 ETag 會在啟始 Copy Blob 作業時變更,並在複製期間頻繁且持續地變更。只有在整個複製完成之後,才能使用 GET 顯示區塊 Blob 的內容。

複製 Blob 屬性和中繼資料

當您複製 Blob 時,會將下列系統屬性複製到目的地 Blob,並保留相同的值:

  • Content-Type

  • Content-Encoding

  • Content-Language

  • Content-Length

  • Cache-Control

  • Content-MD5

  • Content-Disposition

  • x-ms-blob-sequence-number (for page blobs only)

如果 Blob 是區塊 Blob,也會將來源 Blob 之認可的區塊清單複製到目的地 Blob。不會複製任何未認可的區塊。

目的地 Blob 大小一律與來源 Blob 大小相同,因此目的地 Blob 的 Content-Length 標頭值會與來源 Blob 的標頭值相符合。

當來源 Blob 和目的地 Blob 相同時,Copy Blob 會移除所有未認可的區塊。如果在此情況下指定中繼資料,則會以新的中繼資料覆寫現有的中繼資料。

複製租用的 Blob

Copy Blob 作業只會讀取來源 Blob,因此來源 Blob 的租用狀態並不重要。不過,Copy Blob 作業會儲存啟始複製時之來源 Blob 的 ETag。如果 ETag 值在複製完成前有所變更,會導致複製失敗。您可以在複製作業期間租用來源 Blob,以防止來源 Blob 遭到變更。

如果目的地 Blob 有作用中無限期租用,您必須在 Copy Blob 作業的呼叫中指定其租用識別碼。如果您指定的租用為作用中的有限期租用,此呼叫會失敗,並顯示狀態碼 412 (先決條件失敗)。當複製暫止時,目的地 Blob 的任何租用作業都會失敗,並顯示狀態碼 409 (衝突)。不論您是複製到與來源名稱不同的目的地 Blob、複製到與來源名稱相同的目的地 Blob,或將快照集升級到其基底 Blob 之上,都會在複製作業期間,以此方式鎖定目的地 Blob 的無限期租用。如果用戶端指定尚不存在的 Blob 租用識別碼,Blob 服務會針對根據 2013-08-15 及更新版本所提出的要求傳回狀態碼 412 (先決條件失敗),並針對舊版傳回狀態碼 201 (已建立)。

複製快照集

複製來源 Blob 時,不會將來源 Blob 的任何快照集複製到目的地。用某個複本覆寫目的地 Blob 時,與目的地 Blob 相關聯的任何快照集都會保留名稱且保持不變。

您可以執行複製作業,將快照集升級到其基底 Blob 之上如此一來,您可以還原舊版 Blob。快照集會保留,但會以可讀取/寫入的複本覆寫其目的地。

使用暫止的複本 (2012-02-12 版及更新版本)

Copy Blob 作業會以非同步方式完成複製。您可以使用下表,根據 Copy Blob 傳回的狀態碼決定下一個步驟:

 

狀態碼 意義

202 (已接受),x-ms-copy-status:成功

複製已順利完成。

202 (已接受),x-ms-copy-status:暫止

500 或 503

複製未完成。請在複製完成或失敗之前,使用 Get Blob Properties 輪詢目的地 Blob 以檢查 x-ms-copy-status。

4xx,500 或 503

複製失敗。

Copy Blob 作業期間及之後,目的地 Blob 的屬性會包含 Copy Blob 作業的複製識別碼及來源 Blob 的 URL。複製完成時,Blob 服務會將時間和結果值 (successfailedaborted) 寫入目的地 Blob 屬性。如果作業 failedx-ms-copy-status-description 標頭會包含錯誤的詳細資料字串。

暫止的 Copy Blob 作業會有 2 週的逾時。2 週後未完成的複製嘗試會逾時,並留下空白的 Blob,其中 x-ms-copy-status 欄位會設為 failed,而 x-ms-copy-status-description 會設為 500 (OperationCancelled)。複製期間可能發生間歇性和不嚴重的錯誤,此錯誤可能會妨礙複製進度,但不會造成失敗。在此情況下,x-ms-copy-status-description 會描述間歇性的錯誤。

在複製期間嘗試修改目的地 Blob 或擷取目的地 Blob 的快照集會失敗,並顯示 409 (衝突) 複製 Blob 進行中

如果呼叫 Abort Copy Blob 作業,您會看見 x-ms-copy-status:aborted 標頭,且目的地 Blob 會有不變的中繼資料和零位元組的 Blob 長度。您可以重複 Copy Blob 的原始呼叫,以重試複製。

計費

針對啟始複製的每項交易,會向 Copy Blob 作業的目的地帳戶收取費用,每項中止要求或每項複製作業狀態的要求也會產生一筆交易。

如果來源 Blob 在另一個帳戶中,則來源帳戶會產生交易成本。此外,如果來源和目的地帳戶位於不同的地區 (例如美國北部和美國南部),則會向來源儲存體帳戶收取用於傳送要求的頻寬費用,做為輸出。相同地區的帳戶之間其輸出為免費。

當您將來源 Blob 複製到相同帳戶中不同名稱的目的地 Blob 時,您會針對新的 Blob 使用額外的儲存體資源,因此,複製作業會針對這些額外資源使用儲存體帳戶容量的情況,產生費用。不過,如果相同帳戶中的來源和目的地 Blob 的名稱相同 (例如,當您將快照集升級到其基底 Blob 之上),除了額外複製儲存在 2012-02-12 版及更新版本中的中繼資料之外,不會產生其他任何費用。

當您將快照集升級以取代其基底 Blob 時,快照集和基底 Blob 會變成完全相同。這兩者會共用區塊或分頁,因此複製作業不會針對儲存體帳戶的容量使用產生額外的費用。不過,如果您將快照集複製到不同名稱的目的地 Blob,由於新的 Blob 使用儲存體資源,因此會產生其他費用。兩個不同名稱的 Blob 即使完全相同,也無法共用區塊或分頁。如需快照集成本案例的詳細資訊,請參閱<了解快照集如何產生費用>。

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2014 Microsoft