2012-04-08 14 views
3

私は定期的にAmazon S3にデータをプッシュするnode.jsアプリケーションを持っています。私はS3にバッファをプッシュするためにPut要求を使用しています。S3ランダムに私に "BadDigest"エラーを与えます

S3リクエストの「content-md5」パラメータは、私がプッシュしているコンテンツのbase64でエンコードされたMd5ハッシュである必要があることは知っています。 私が混乱していることは、時間の90%が私の要求が成功することです。時間の他の10%は、私のハッシュ法は全く変更せずに、Amazonは「badDigest」エラーを私に戻っています:誰が前にS3からこのランダム性を経験している

{ [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' } } 

?私は明白な何かを欠いていますか

ありがとうございます!

+0

node.jsバージョン? – Skomski

答えて

2

のパラメータとして'utf8'を指定していない可能性があります。

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

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

+0

これはおかげで、utf8のデフォルトにする必要があるようですが、それは問題ありません。 –

0

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