3

一部のデータを定期的に Amazon S3 にプッシュする node.js アプリがあります。Put リクエストを使用してバッファを S3 にプッシュしています。

S3 リクエストの「content-md5」パラメーターは、プッシュしているコンテンツの base64 でエンコードされた Md5 ハッシュである必要があることを知っています。 私が混乱しているのは、90% の確率で私のリクエストが成功することです。 残りの 10% の時間では、ハッシュ方法がまったく変更されていないため、Amazon から「badDigest」エラーが返されます。

{ [Error: API error with HTTP Code: 400]
  headers: 
   { 
     'content-type': 'application/xml',
     'transfer-encoding': 'chunked',
     date: 'Fri, 06 Apr 2012 02:20:14 GMT',
     connection: 'close',
     server: 'AmazonS3' },
  code: 400,
  document: 
   { Code: 'BadDigest',
     Message: 'The Content-MD5 you specified did not match what we received.',
     ExpectedDigest: 'fPRrmxapcSHmI2gljme1Fg==',
     CalculatedDigest: 'w6PoDxh2ty478+Mw2UwTrA==',
     RequestId: '1018E7A80A8B0B00',
     HostId: 'W/SK/OovQHlsi593DJ154pkHdOrUk3oMWmIGNdOKj3WaHa8cBknhB+7H5IdZLUjt' } }

以前に S3 からこのランダム性を経験した人はいますか? 明らかな何かが欠けていますか?

ありがとう!

4

2 に答える 2

2

'utf8'のパラメータとして指定するのを忘れた可能性がありますupdate

var status = 'काक्नोम्यत्क्नोम्यत्चं शक्नोम्यत्तुमतुम् ।तुम् ।् । नोपहिनस्ति माम् ॥';
var contentMd5 = crypto
                  .createHash('md5')
                  .update(status, 'utf8')
                  .digest('base64');

ほとんどの場合は機能しませんが、文字列にマルチバイト文字が含まれている場合は機能しません。

于 2012-04-27T13:49:07.047 に答える
1

aws-sdk は ContentMD5 と ContentLength の値を自動的に計算します。UTF-8 文字列があり、'.length' を使用して ContentLength 値を設定している場合、S3 は BadDigest エラーを返します。したがって、私の場合の解決策は、aws-sdk に ContentMD5 と ContentLength の値を計算させるだけでした。

于 2016-01-26T22:32:43.517 に答える