Amazon Simple Storage Service (Amazon S3) バケットにオブジェクトをアップロードしたいです。さらに、アップロードされたオブジェクトの整合性を検証したいです。
簡単な説明
Content-MD5 ヘッダーを使用してアップロードされたオブジェクトの整合性を検証するには、次の手順を実行します。
注: Content-MD5 ヘッダーを使用すると、Amazon S3 はオブジェクトを指定された Content-MD5 値と照合します。値が一致しない場合、エラーが発生します。
解決策
オブジェクトの Content-MD5 値を計算する
Windows OS
Windows オペレーティングシステムを使用している場合は、Microsoft PowerShell Utility で Get-FileHash コマンドレットを使用すると、MD5 ダイジェストを計算できます。例を次に示します。
Get-FileHash \path\to\file -algorithm MD5 | Format-List
注: Get-FileHash コマンドレットは Microsoft PowerShell Utility バージョン 4.0 以降で使用できます。
出力例を次に示します。
Algorithm : MD5
Hash : C9A5A6878D97B48CC965C1E41859F034
Path : \path\to\file
次に、計算された MD5 ダイジェストに base64 エンコーディングを適用して、必要な Content-MD5 値を取得します。
$hashString ='C9A5A6878D97B48CC965C1E41859F034'
$hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
$ContentMD5 = [System.Convert]::ToBase64String($hashByteArray)
Echo $ContentMD5
yaWmh42XtIzJZcHkGFnwNA==
この例では、Echo $ContentMD5 の出力 ("yaWmh42XtIzJZcHkGFnwNA==") が必要な Content-MD5 値です。
Linux OS
Linux オペレーティングシステムを使用している場合は、次の OpenSSL コマンドを実行してファイルの Content-MD5 値を取得します。
openssl md5 -binary PATH/TO/FILE | base64
アップロードされたオブジェクトの整合性を確認する
PutObject を使用して Amazon S3 にオブジェクトをアップロードするときに、Content-MD5 値をリクエストヘッダーとして渡します。Amazon S3 は、取得した Content-MD5 値でオブジェクトを照合します。値が一致しない場合、エラーが発生します。
Content-MD5 リクエストヘッダーは、S3 UploadPart API でも使用できます。
関連情報
一般的なリクエストヘッダー
S3 でのエラー応答