銷售: 1-800-867-1380
本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。
譯文
原文

放置分頁

 

Put Page 作業會將頁面範圍寫入分頁 blob。

Put Page 要求可能建構如下。 建議使用 HTTPS。 取代 myaccount 的儲存體帳戶名稱:

PUT 方法要求 URI

HTTP 版本

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

HTTP/1.1

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

PUT 方法要求 URI

HTTP 版本

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

HTTP/1.1

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

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

參數

說明

timeout

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

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

要求標頭

說明

Authorization

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

Datex-ms-date

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

x-ms-version

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

Range

可能是 Rangex-ms-range 需要。

指定要以頁面寫入的位元組範圍。 您必須指定開始和結束範圍。 此標頭由定義 HTTP/1.1 通訊協定規格

若為頁面更新作業,頁面範圍的大小上限為 4 MB。 若為頁面清除作業,頁面範圍最大可以是 Blob 完整大小的值。

由於頁面必須符合 512 個位元組的界限,因此起始位移必須是 512 的模數,而結束位移必須是 512 - 1 的模數。 有效的位元組範圍範例包括 0-511、512-1023 等。

Blob 服務接受只使用單一位元組範圍的 Range 標頭和位元組範圍必須採用下列格式指定: bytes=startByte-endByte

如果兩個 Rangex-ms-range 會指定服務使用的值 x-ms-range 請參閱 指定 Blob 服務作業的範圍標頭 如需詳細資訊。

x-ms-range

可能是 Rangex-ms-range 需要。

指定要以頁面寫入的位元組範圍。 您必須指定開始和結束範圍。 此標頭由定義 HTTP/1.1 通訊協定規格

若為頁面更新作業,頁面範圍的大小上限為 4 MB。 若為頁面清除作業,頁面範圍最大可以是 Blob 完整大小的值。

由於頁面必須符合 512 個位元組的界限,因此起始位移必須是 512 的模數,而結束位移必須是 512 - 1 的模數。 有效的位元組範圍範例包括 0-511、512-1023 等。

Blob 服務接受只使用單一位元組範圍的 x-ms-range 標頭和位元組範圍必須採用下列格式指定: bytes=startByte-endByte

如果兩個 Rangex-ms-range 會指定服務使用的值 x-ms-range 請參閱 指定 Blob 服務作業的範圍標頭 如需詳細資訊。

Content-Length

必要項。 指定要求主體中所傳輸的位元組數目。x-ms-page-write 標頭設定為 clear, ,此標頭的值必須設定為零。

Content-MD5

選擇項。 頁面內容的 MD5 雜湊。 在傳輸期間,此雜湊可用來驗證頁面的完整性。 指定此標頭時,儲存體服務會比較已到達的內容雜湊與傳送的標頭值。 如果這兩個雜湊不相符,作業會失敗,並顯示錯誤碼 400 (不正確的要求)。

Content-MD5 標頭時,不允許 x-ms-page-write 標頭設定為 clear 如果在要求中包含此標頭,Blob 服務會傳回狀態碼 400 (不正確的要求)。

x-ms-page-write: {update | clear}

必要項。 您可以指定下列其中一個選項:

  • Update:寫入至指定的範圍要求主體所指定的位元組。 RangeContent-Length 標頭必須符合執行更新。

  • Clear:清除指定的範圍和釋放該範圍內使用儲存體中的空間。 若要清除範圍,設定 Content-Length 為零,標頭和 Range 標頭指出要清除,最多為最大 blob 大小之範圍的值。

x-ms-lease-id:<ID>

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

x-ms-if-sequence-number-le: <num>

選擇項。 如果 Blob 的序號小於或等於指定值,要求會繼續,否則會失敗並顯示 SequenceNumberConditionNotMet 錯誤 (HTTP 狀態碼 412 - 先決條件失敗)。

x-ms-if-sequence-number-lt: <num>

選擇項。 如果 Blob 的序號小於指定值,要求會繼續,否則會失敗並顯示 SequenceNumberConditionNotMet 錯誤 (HTTP 狀態碼 412 - 先決條件失敗)。

x-ms-if-sequence-number-eq: <num>

選擇項。 如果 Blob 的序號等於指定值,要求會繼續,否則會失敗並顯示 SequenceNumberConditionNotMet 錯誤 (HTTP 狀態碼 412 - 先決條件失敗)。

If-Modified-Since

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

If-Unmodified-Since

選擇項。 A DateTime 值。 只有在未指定日期/時間修改 Blob 時,才能指定此條件式標頭以寫入頁面。 如果已修改 Blob,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

If-Match

選擇項。 ETag 值。 只有在其 ETag 值符合指定值時,才能指定此條件式標頭的 ETag 值寫入頁面。 如果兩值不相符,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

If-None-Match

選擇項。 ETag 值。

只有在其 ETag 值未符合指定值時,才能指定此條件式標頭的 ETag 值寫入頁面。 如果兩值完全相同,Blob 服務會傳回狀態碼 412 (先決條件失敗)。

x-ms-client-request-id

選擇項。 提供啟用儲存體分析記錄時,由用戶端產生的不透明值,而且在分析記錄中記錄 1 KB 的字元限制。 要將用戶端活動與伺服器收到的要求產生關聯時,極力建議您使用這個標頭。 如需詳細資訊,請參閱 關於儲存體分析記錄Azure 記錄:使用記錄檔追蹤儲存體需求

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

要求主體包含頁面的內容。


Request Syntax: PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1 Request Headers: x-ms-page-write: update x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT x-ms-version: 2011-08-18 x-ms-range: bytes=0-65535 Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI= Content-Length: 65536


Request Syntax: PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1 Request Headers: Range: bytes=1024-2048 x-ms-page-write: clear x-ms-date: Sun, 25 Sep 2011 23:37:35 GMT x-ms-version: 2011-08-18 Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=

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

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

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

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

語法

說明

ETag

Blob 的 ETag。 如果要求版本為 2011-08-18 或更新版本,ETag 值會加上引號。 ETag 可用來執行條件式 Put Page 藉由指定其值的作業 If-MatchIf-None-Match 要求標頭。

Last-Modified

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

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

Content-MD5

傳回此標頭,以供用戶端檢查訊息內容完整性。 Blob 服務會計算此標頭的值,此值與要求標頭中指定的值不一定相同。

x-ms-blob-sequence-number

分頁 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: sQqNsWTgdUEFt6mb5y4/5Q== Date: Sun, 25 Sep 2011 22:33:35 GMT ETag: "0x8CB171BA9E94B0B" Last-Modified: Sun, 25 Sep 2011 12:13:31 GMT x-ms-version: 2011-08-18 x-ms-blob-sequence-number: 0 Content-Length: 0 Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

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

Put Page 作業會將頁面範圍寫入分頁 blob。 您只能對現有的分頁 Blob 呼叫這項作業。 您無法呼叫這項作業以建立新的分頁 Blob,也無法對區塊 Blob 呼叫這項作業。 呼叫 Put Page blob 目前不存在的名稱會傳回 BlobNotFound 錯誤 (HTTP 狀態碼 404 – 找不到)。

若要建立新的分頁 blob,請呼叫 放置 Blob 並指定要建立為分頁 blob 的 blob 類型。 分頁 Blob 的大小上限為 1 TB。

如果 Blob 有作用中租用,用戶端必須在要求上指定有效的租用識別碼,才能寫入頁面。

頁面更新作業

呼叫 Put PageUpdate 選項指定的分頁 blob 上執行就地寫入。 指定頁面中的所有內容都會以更新的內容覆寫。

System_CAPS_important重要事項

如果伺服器逾時或您的連線已關閉期間 Put Page, ,可能會或可能尚未更新頁面。 因此,您應該繼續重試更新,直到收到表示成功的回應。

每個範圍的頁面送出 Put Page 的更新作業可能是 4 MB 的大小。 頁面的開始和結束範圍必須符合 512 位元組的界限。 如果您嘗試上傳大於 4 MB 的頁面範圍,服務會傳回狀態碼 413 (要求的實體太大)。

頁面清除作業

呼叫 Put PageClear 選項可釋放指定頁面所使用的儲存空間。 已清除的頁面將不會再當做分頁 Blob 的一部分追蹤。

已清除的頁面由於已釋放其儲存體資源,因此不會再對儲存體帳戶收取費用。 如果分頁 Blob 具有快照集,則是唯一的例外狀況,當相同頁面不再做為來源 Blob 的一部分存在時,快照集中的頁面就會產生費用。

管理並行問題

Blob 服務會循序處理重疊頁面的並行寫入:服務所處理的最後一頁會決定 Blob 的內容。 因此,為了確保 Blob 內容的完整性,用戶端應該使用下列一或多種方法,處理重疊頁面的寫入:

  • 您可以檢查的值 Last-Modified 每次成功呼叫的回應標頭 Put Page 從 Blob 服務傳回回應的順序,不一定會對應至服務執行回應的順序。 但是這個值的 Last-Modified 一律會指出服務處理要求的順序。

  • 您可以使用開放式並行存取,根據 Blob 的 ETag 或上次修改時間有條件地執行更新。 此方法適用於並行寫入數目較低的情況。 使用條件式要求標頭 If-Match, ,If-None-Match, ,If-Modified-Since, ,和 If-Unmodified-Since 針對此目的。

  • 您可以呼叫 租用 Blob 更新鎖定對一分鐘內或更長的 if 其他寫入 blob 租用。

  • 您可以使用 Blob 的序號,以確保在重試沒有回應的要求時,不會產生並行更新。 當用戶端需要提高頁面寫入的輸送量時,最適合使用此方法。 下一節將會進行詳細的說明。

使用分頁 Blob 序號重試要求

當呼叫 Put Page 逾時或未傳回回應,則無法確定要求是否成功。 因此,您必須重試要求,但是由於 Azure 儲存體服務的分散本質,原始要求可能在重試的要求成功之後處理。 延遲的原始要求可能會覆寫其他更新,而產生非預期的結果。 以下循序說明發生的情況:

  1. A Put Page 移出分頁時間 0 的值"X"寫入要求或未傳回回應。

  2. 將值 "X" 寫入頁面 0 的重試要求成功。

  3. 將值 "Y" 寫入頁面 0 的要求成功。

  4. 原始要求成功,並將值 "X" 寫入頁面 0。

  5. 當用戶端預期值 "Y" 時,讀取頁面 0 卻傳回值 "X"。

當原始要求未傳回狀態碼 100-499 或 503 (伺服器忙碌) 時,可能發生這類衝突。 如果傳回上述狀態碼之一,則可以確定要求成功或失敗。 但是,如果服務傳回此範圍以外的狀態碼,則無法確定原始要求的狀態。

為了避免這類衝突,您可以使用分頁 Blob 的序號,以確保重試要求時,原始要求不會成功。 為了達成目的,您應該遞增序號,然後再重試原始要求。 然後,您可以使用條件式序號標頭,以確保序號不符合預期的序號時,要求會失敗。 以下循序說明此方法:

  1. 用戶端會建立具有的分頁 blob 放置 Blob 並將其序號設為 0。

  2. A Put Page 值"X"寫入頁面 0 要求 if-sequence-number-lt 標頭設定為 1 逾時或未傳回回應。

  3. 用戶端呼叫 Set Blob Properties,並將序號更新為 1。

  4. 將值"X"寫入頁面 0 的重試的要求 if-sequence-number-lt2 成功。

  5. 將值"Y"寫入頁面 0 的要求 if-sequence-number-lt2 成功。

  6. 最後處理原始要求,但它會失敗,因為它會指定的序號必須小於 1 的條件 (也就是 if-sequence-num-lt 標頭設定為 1)。 錯誤為 SequenceNumberConditionNotMet (HTTP 狀態碼 412 - 先決條件失敗)。

  7. 讀取頁面 0 傳回預期值 "Y"。

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