2012-04-08 3 views
3

У меня есть приложение node.js, которое периодически подталкивает некоторые данные к Amazon S3. Я использую запрос Put, чтобы переместить буфер на S3.S3 случайным образом дает мне ошибки «BadDigest»

Я знаю, что параметр «content-md5» для запроса S3 должен быть хешем Md5 с кодировкой base64 содержимого, которое я нажимаю. Что меня смущает, так это то, что в 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 до? Мне что-то не хватает?

Спасибо!

+0

версия node.js? – Skomski

ответ

2

Возможно, вы забыли указать 'utf8' в качестве параметра для update.

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

Не работает он в большинстве случаев, но не в том случае, если ваша строка содержит многобайтовые символы.

+0

Спасибо за это, похоже, что он должен по умолчанию использовать utf8, но это нормально. –

0

aws-sdk автоматически вычислит значения ContentMD5 и ContentLength для вас. Если у вас есть строка UTF-8, и вы используете длину «.्»., Чтобы установить значение ContentLength, значение S3 вернет ошибку BadDigest. Таким образом, решение в моем случае просто позволило aws-sdk вычислить значения ContentMD5 и ContentLength.

Смежные вопросы