我想用python sdk上傳blob到azure blob存儲。上傳後,我想在服務器端傳遞MD5散列值進行驗證。python azure blob storage md5檢查使用put_block_blob_from_path上傳blob上傳失敗
下面的代碼:
blob_service.put_block_blob_from_path(
container_name='container_name',
blob_name='upload_dir/'+object_name,
file_path=object_name,
content_md5=object_md5Hash
)
但我得到這個錯誤:
AzureHttpError: The MD5 value specified in the request did not match with the MD5 value calculated by the server.
該文件是200MB〜和錯誤立即拋出。不上傳文件。所以我懷疑它可能會比較提供的散列或第一塊散列或其他東西。
任何想法?
這是一個錯誤,我們應該拋出一個更好的錯誤消息,而不是點擊服務,但驗證必須分塊的大型上傳內容根本行不通。 x_ms_blob_content_md5將存儲md5,但該服務不會對其進行驗證。 content_md5驗證特定請求的內容,但由於有多個分塊的blob,它將無法工作。 –
@ EmilyGerner-Microsoft - 我認爲這個錯誤是在嘗試在分塊上傳之前先創建一個空塊blob。這一步恕我直言,是完全沒有必要的,並會造成問題。例如,如果分塊上載失敗怎麼辦。在這種情況下,用戶將在他們的存儲帳戶中擁有一個零字節的blob。我同意你對content_md5/x_ms_blob_content_md5的評論。 –
是的,你是對的 - 這個額外的put實際上已經在下一個lib版本中被刪除了。有一次,如果任何訪問條件不匹配,則會縮短上傳次數,否則在put block列表操作上傳後會失敗。就像我說的那樣,刪除了。 content_md5仍然會被應用到put block列表操作,儘管哪一個仍然沒有意義,所以對於下一個版本,我們還會添加一條錯誤消息,以便在上傳之前關閉該場景。接得好! –