銷售: 1-800-867-1380

放置區塊清單

更新日期: 2014年1月

Put Block List 作業可透過指定組成 Blob 的區塊識別碼清單,將 Blob 寫入。為了當做 Blob 的一部分寫入,您必須先將區塊成功寫入伺服器,再執行 放置區塊 作業。

您可以呼叫 Put Block List,只上傳已變更的區塊,然後同時認可新的及現有的區塊,以更新 Blob。若要達成此目的,您可從認可的區塊清單或未認可的區塊清單中的區塊指定是否要認可此區塊,或認可最近上傳的區塊版本 (而不論其所屬的清單為何)。

Put Block List 要求的建構如下。建議使用 HTTPS。請以您的儲存體帳戶名稱取代 myaccount

 

  PUT 方法要求 URI HTTP 版本

https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=blocklist

HTTP/1.1

對模擬儲存體服務提出要求時,請將模擬器主機名稱和 Blob 服務通訊埠指定為 127.0.0.1:10000,後面接著模擬儲存體帳戶名稱:

 

  PUT 方法要求 URI HTTP 版本

http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=blocklist

HTTP/1.1

請注意,儲存體模擬器最多只支援 2 GB 的 Blob 大小。

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

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

 

參數 描述

timeout

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

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

 

要求標頭 描述

Authorization

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

Datex-ms-date

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

x-ms-version

所有已驗證要求的必要項。指定用於這個要求的作業版本。如需詳細資訊,請參閱Azure 儲存體服務的版本設定

Content-Length

必要項。要求內容的長度 (以位元組為單位)。請注意,此標頭是指區塊清單的內容長度,而不是 Blob 本身的內容長度。

Content-MD5

選擇性。要求內容的 MD5 雜湊。在傳輸期間,此雜湊可用來驗證要求內容的完整性。如果這兩個雜湊不相符,作業會失敗,並顯示錯誤碼 400 (不正確的要求)。

請注意,此標頭與要求內容相關聯,而不是與 Blob 本身的內容相關聯。

x-ms-blob-cache-control

選擇性。設定 Blob 的快取控制。如果指定,此屬性會儲存在 Blob 中,並在讀取要求時傳回。

如果要求中未指定此屬性,則會在要求成功時,從 Blob 中清除此屬性。

x-ms-blob-content-type

選擇性。設定 Blob 的內容類型。如果指定,此屬性會儲存在 Blob 中,並在讀取要求時傳回。

如果未指定內容類型,則會設為預設類型 application/octet-stream

x-ms-blob-content-encoding

選擇性。設定 Blob 的內容編碼。如果指定,此屬性會儲存在 Blob 中,並在讀取要求時傳回。

如果要求中未指定此屬性,則會在要求成功時,從 Blob 中清除此屬性。

x-ms-blob-content-language

選擇性。設定 Blob 的內容語言。如果指定,此屬性會儲存在 Blob 中,並在讀取要求時傳回。

在要求中未指定此屬性,則會在要求成功時,從 Blob 中清除此屬性。

x-ms-blob-content-md5

選擇性。Blob 內容的 MD5 雜湊。請注意,由於上傳每個區塊時,已驗證個別區塊的雜湊,因此不會驗證此雜湊。

取得 Blob 作業會在 Content-MD5 回應標頭中傳回此標頭的值。

如果要求中未指定此屬性,則會在要求成功時,從 Blob 中清除此屬性。

x-ms-meta-name:value

選擇性。與 Blob 相關聯之使用者定義的名稱/值組。

請注意,從 2009-09-19 版開始,中繼資料名稱必須遵守 C# 識別碼的命名規則。

x-ms-lease-id:<ID>

如果 Blob 具有作用中租用,則為必要項目。若要在具有作用中租用的 Blob 執行這項作業,請指定此標頭的有效租用識別碼。

x-ms-client-request-id

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

x-ms-blob-content-disposition

選擇性。設定 Blob 的 Content-Disposition 標頭。適用於 2013-08-15 和更新版本。

Content-Disposition 標頭欄位會傳遞如何處理回應裝載的其他資訊,也可用來附加其他中繼資料。例如,如果設為 attachment,它會指出使用者代理程式不該顯示回應,而會顯示 [另存新檔] 對話方塊。

取得 Blob取得 Blob 屬性 作業的回應包括 content-disposition 標頭。

唯有在符合指定條件的情況下,此作業也可支援使用條件式標頭以認可區塊清單。如需詳細資訊,請參閱指定 Blob 服務作業的條件式標頭

在要求主體中,您可以指定 Blob 服務應該針對要求區塊檢查哪些區塊清單。如此一來,您可以透過插入、取代或刪除個別區塊更新現有的 Blob,而不是重新上傳整個 Blob。在您上傳已變更的一個或多個區塊之後,您可以透過同時認可新區塊及想保留的現有區塊,認可新版本的 Blob。

若要更新 Blob,您可以指定服務在認可的區塊清單或未認可的區塊清單中尋找區塊識別碼,或先後在未認可及認可的區塊清單中尋找區塊識別碼。請如下所示,在要求主體的適當 XML 項目中指定區塊識別碼,以表示所要使用的方法:

  • Committed 項目中指定區塊識別碼,表示 Blob 服務只應在認可的區塊清單中搜尋具名區塊。如果在認可的區塊清單中找不到此區塊,此區塊不會當做 Blob 的一部分寫入,且 Blob 服務會傳回狀態碼 400 (不正確的要求)。

  • Uncommitted 項目中指定區塊識別碼,表示 Blob 服務只應在未認可的區塊清單中搜尋具名區塊。如果在未認可的區塊清單中找不到此區塊,此區塊不會當做 Blob 的一部分寫入,且 Blob 服務會傳回狀態碼 400 (不正確的要求)。

  • Latest 項目中指定區塊識別碼,表示 Blob 服務應先搜尋未認可的區塊清單。如果在未認可的清單中找到此區塊,此區塊會是最新版本,且應該寫入 Blob。如果在未認可的清單找不到此區塊,則服務應該在認可的區塊清單中搜尋具名區塊,並將找到的區塊寫入 Blob。

本版 Put Block List 的要求主體使用下列 XML 格式:

<?xml version="1.0" encoding="utf-8"?>
<BlockList>
 <Committed>first-base64-encoded-block-id</Committed>
 <Uncommitted>second-base64-encoded-block-id</Uncommitted>
 <Latest>third-base64-encoded-block-id</Latest>
 ...
</BlockList>

若要示範 Put Block List,請假設您已上傳三個目前想認可的區塊。下列範例會透過指定列示的每個區塊所應使用的最新版本,認可新的 Blob。您不需要確定是否已認可這些區塊。


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=blocklist HTTP/1.1
Request Headers:
x-ms-date: Wed, 31 Aug 2011 00:17:43 GMT
x-ms-version: 2011-08-18
Content-Type: text/plain; charset=UTF-8
Authorization: SharedKey myaccount:DJ5QZSVONZ64vAhnN/wxcU+Pt5HQSLAiLITlAU76Lx8=
Content-Length: 133
Request Body:
<?xml version="1.0" encoding="utf-8"?>
<BlockList>
 <Latest>AAAAAA==</Latest>
 <Latest>AQAAAA==</Latest>
 <Latest>AZAAAA==</Latest>
</BlockList>

接下來,假設您想更新 Blob。新的 Blob 將具有下列變更:

  • 識別碼為 ANAAAA== 的新區塊。您必須先呼叫 放置區塊 上傳此區塊,並等到區塊出現在未認可的區塊清單時,再呼叫 Put Block List

  • 識別碼為 AZAAAA== 之區塊的更新版本。您必須先呼叫 放置區塊 上傳此區塊,並等到區塊出現在未認可的區塊清單時,再呼叫 Put Block List

  • 移除識別碼為 AAAAAA== 的區塊。如果 Put Block List 的下一個呼叫未包含此區塊,則表示此區塊會有效地從 Blob 中移除。

下列範例示範如何呼叫 Put Block List 以更新 Blob:


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=blocklist HTTP/1.1
Request Headers:
x-ms-date: Wed, 31 Aug 2009 00:17:43 GMT
x-ms-version: 2011-08-18
Content-Type: text/plain; charset=UTF-8
Authorization: SharedKey myaccount:DJ5QZSVONZ64vAhnN/wxcU+Pt5HQSLAiLITlAU76Lx8=
Content-Length: 133
Request Body:
<?xml version="1.0" encoding="utf-8"?>
<BlockList>
 <Uncommitted>ANAAAA==</Uncommitted>
 <Committed>AQAAAA==</Committed>
 <Uncommitted>AZAAAA==</Uncommitted>
</BlockList>

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

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

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

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

 

回應 說明

ETag

實體標記包含用戶端使用 GET/PUT 要求標頭執行條件式 If-Match 作業所使用的值。如果要求版本為 2011-08-18 或更新版本,ETag 值會加上引號。

Last-Modified

上次修改 Blob 的日期/時間。日期格式會依照 RFC 1123。如需詳細資訊,請參閱標頭中的日期/時間值表示方式

修改 Blob 的任何作業 (包括 Blob 更新的中繼資料或屬性),都會變更 Blob 上次修改的時間。

Content-MD5

傳回此標頭,以供用戶端檢查訊息內容完整性。此標頭是指要求的內容,在本例中是指區塊的清單,而不是 Blob 本身的內容。

x-ms-request-id

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

x-ms-version

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

Date

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

Response Status:
HTTP/1.1 201 Created
Response Headers:
Transfer-Encoding: chunked
Content-MD5: oafL1+HS78x65+e39PGIIg==
Date: Sun, 25 Sep 2011 00:17:44 GMT
ETag: “0x8CB172A360EC34B”
Last-Modified: Sun, 25 Sep 2011 00:17:43 GMT
x-ms-version: 2011-08-18
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

帳戶擁有者以及擁有共用存取簽章的任何人才能呼叫此作業,且簽章需有此 Blob 或其容器的寫入權限。

Put Block List 作業會強制執行此順序,結合區塊以建立 Blob。

您可以在區塊清單中指定多次相同的區塊識別碼。如果指定多次區塊識別碼,則會以區塊清單中每個出現位置的位元組範圍代表最終認可的 Blob。如果區塊識別碼在清單中出現多次,則必須在相同的區塊清單中指定區塊識別碼的兩個執行個體。換句話說,您必須在 Committed 項目、Uncommitted 項目或 Latest 項目中指定這兩個執行個體。

透過 Put Block List,您可以插入、更新或刪除個別區塊以修改現有的 Blob,而不需要再重新上傳整個 Blob。您可以指定目前認可的區塊清單和未認可的區塊清單中的區塊識別碼,以建立新的 Blob 或更新現有 Blob 的內容。如此一來,您可以從未認可的區塊清單指定一些新區塊,然後從認可的區塊清單指定其餘區塊 (這些區塊已是現有 Blob 的一部分) 以更新 Blob。

如果在 Latest 項目中指定區塊識別碼,但認可及未認可的區塊清單中存在相同的區塊識別碼,Put Block List 會認可位於未認可的區塊清單中的區塊。如果此區塊識別碼存在於認可的區塊清單中,但不存在於未認可的區塊清單中,則 Put Block List 會認可位於認可的區塊清單中的區塊。

認可的區塊數目上限為 50,000,而透過 Put Block List 作業認可的 Blob 大小上限為 200 GB。如果您嘗試認可 50,000 個以上的區塊,服務會傳回狀態碼 413 (要求的實體太大)。此服務也會在回應中傳回錯誤的其他資訊,包括允許的區塊數目上限。

可與 Blob 產生關聯的未認可區塊數目上限為 100,000,而未認可區塊清單的大小上限為 400 GB。

當您呼叫 Put Block List 更新現有的 Blob 時,會覆寫 Blob 的現有屬性和中繼資料。但是,任何現有的快照集會保留在 Blob 中。您可以使用此條件式標頭,僅在符合指定條件時,才執行作業。

如果 Put Block List 作業因遺漏區塊而失敗,您必須上傳遺漏的區塊。

繼上次 Put Block 作業成功之後,如果一星期內沒有在 Blob 上成功呼叫 Put Block ListPut Block,任何未認可的區塊都會進行記憶體回收。如果在 Blob 上呼叫 放置 Blob,任何未認可的區塊都會進行記憶體回收。

如果 Blob 有作用中租用,用戶端必須在要求上指定有效的租用識別碼,才能認可區塊清單。如果用戶端未指定租用識別碼,或是指定無效的租用識別碼,Blob 服務會傳回狀態碼 412 (先決條件失敗)。如果用戶端指定租用識別碼,但是 Blob 沒有作用中租用,Blob 服務也會傳回狀態碼 412 (先決條件失敗)。如果用戶端指定尚不存在的 Blob 租用識別碼,Blob 服務會針對根據 2013-08-15 及更新版本所提出的要求傳回狀態碼 412 (先決條件失敗),並針對舊版傳回狀態碼 201 (已建立)。

如果 Blob 有作用中租用,且您呼叫 Put Block List 更新 Blob,更新的 Blob 中會保留此租用。

Put Block List 只適用於區塊 Blob。對分頁 Blob 呼叫 Put Block List 會導致狀態碼 400 (不正確的要求)。

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