1
我目前正試圖實現一個系統來驗證我上傳到S3的文件的完整性。通過適用於JavaScript的AWS開發工具包,我可以檢索遠程對象的ETag,但是,本地對象的MD5散列與ETag不匹配。我目前使用crypto
生成,如下所示:在上傳到AWS S3時計算Node.js中的本地文件的ETag
var hash = crypto.createHash('md5');
stream = fs.createReadStream(localfile);
stream.on('data', function (data) {
hash.update(data, 'utf8')
})
stream.on('end', function() {
md5 = hash.digest('hex');
< rest of the code >
});
根據我的一切,同時尋找答案結果發現,對於S3對象的ETag應該是簡單的MD5哈希:例如the AWS documentation(重點煤礦):
爲了確保數據沒有受損穿越網絡,使用 內容-MD5報頭。當您使用此標頭時,Amazon S3會根據提供的MD5值檢查 對象,如果它們不匹配,則 會返回錯誤。 此外,您可以計算MD5,而 將對象放入Amazon S3,並將返回的ETag與 計算出的MD5值進行比較。
但是,我的本地散列與遠程ETag不匹配。我在這裏錯過了什麼嗎?
謝謝你的時間!
澄清:我只上傳小純文本文件,而我沒有處理多部分上傳。我已經看到,網絡上的很多問題都是關於多部分上傳的,但這僅僅適用於簡單的上傳。謝謝!
取一個文件,使用'md5sum'命令行實用程序,並計算文件的md5sum。如果答案不同意你的計算,你的計算是不正確的。 「Content-MD5」標頭是您通過上傳發送的標頭。與十六進制編碼的ETag不同,Content-MD5是base64。 –
你說你的測試文件是一個文本文件,我在你的代碼中看到'utf8'。你可以計算基於文件的*文本而不是二進制字節的MD5嗎? –
其實,我很不好意思承認,在發佈之前的這段時間,我在代碼中做了一些改動,而且我不知不覺地上傳了與本地實際不同的文件,所以問題不在於MD5總和,但在椅子和桌子之間,一如既往。抱歉! – finferflu