跳至內容

如何檢查上傳到 Amazon S3 之物件的完整性?

2 分的閱讀內容
0

我想將物件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。另外,我想驗證上傳物件的完整性。

解決方法

對於一般用途儲存貯體,請使用 Content-MD5 標頭來檢查已上傳物件的完整性。對於目錄儲存貯體,請使用支援的總和檢查演算法來檢查已上傳物件的完整性。

注意: 當您對目錄儲存貯體使用 PutObject 作業時,Amazon S3 不支援使用 Content-MD5 進行完整性檢查。Amazon S3 也不支援向量或資料表儲存貯體的完整性檢查。

一般用途儲存貯體

對於一般用途儲存貯體,請計算物件的 Content-MD5 值。

**注意:**當您使用 Content-MD5 標頭時,Amazon S3 會根據提供的 Content-MD5 值檢查物件。如果值不相符,您會收到錯誤。

Windows 作業系統 (OS)

如果您使用 Windows 作業系統,可以使用 Microsoft PowerShell Utility 中的 Get-FileHash Cmdlet 來計算 MD5 摘要。

  1. 以下命令會取得 MD5 摘要:

    Get-FileHash \path\to\file -algorithm MD5 | Format-List

    注意: 將 \path\to\file 替換為您物件的路徑。

    **注意:**Get-FileHash Cmdlet 可用於 Microsoft PowerShell Utility 4.0 及更新版本。

    以下是範例輸出:

    Algorithm : MD5Hash      : C9A5A6878D97B48CC965C1E41859F034  
    Path      : \path\to\file
  2. 對計算出的 MD5Hash 值套用 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

注意: 將 path/to/file 替換為您物件的路徑。

目錄儲存貯體

使用 MD5 以外的支援總和檢查演算法,驗證目錄儲存貯體中已上傳物件的完整性。例如,使用以下步驟搭配 x-amz-checksum-sha256 標頭 (SHA256) 驗證已上傳物件的完整性。

**注意:**當您使用 x-amz-checksum-sha256 標頭時,Amazon S3 會根據提供的 x-amz-checksum-sha256 值檢查物件。如果值不相符,您會收到錯誤。

Windows OS

如果您使用 Windows 作業系統,可以使用 Microsoft PowerShell Utility 中的 Get-FileHash Cmdlet 來計算 SHA256 摘要。

  1. 以下命令會取得 SHA256 摘要:

    Get-FileHash \path\to\file -algorithm SHA256 | Format-List

    注意: 將 \path\to\file 替換為您物件的路徑。

    以下是範例輸出:

    Algorithm : SHA256  
    Hash      : E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855  
    Path      : \path\to\file
  2. 對計算出的 SHA256 摘要套用 base64 編碼,以取得所需的 SHA256 值:

    hashString ='E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855'  
    hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')  
    ContentSHA256 = [System.Convert]::ToBase64String($hashByteArray)  
    Echo ContentSHA256  
    `47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=`

    在此範例中,Echo ContentSHA256 的輸出 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=,即為所需的 SHA256 值。

Linux OS

如果您使用 Linux 作業系統,請執行以下 OpenSSL 命令以取得檔案的 SHA256 值:

openssl sha256 -binary path/to/file | base64

注意: 將 path/to/file 替換為您物件的路徑。

驗證已上傳物件的完整性

當您使用 PutObject 將物件上傳到 Amazon S3 時,請將 Content-MD5 值作為一般用途儲存貯體的請求標頭傳遞。

對於目錄儲存貯體,請將 x-amz-checksum-sha256 值,以及設為 SHA256 的 x-amz-checksum-algorithm 標頭作為請求標頭傳遞。Amazon S3 會根據提供的 Content-MD5/SHA256 值檢查物件。如果值不相符,您會收到錯誤。您也可以將 SHA256 請求標頭搭配 Amazon S3 的 UploadPart API 使用。

相關資訊

常見請求標頭

Amazon S3 錯誤回應

AWS 官方已更新 7 個月前