Возвращенный URL от getSignedUrl не работает - PullRequest
0 голосов
/ 20 сентября 2018

Я впервые внедряю aws s3, используя aws-sdk на Node.js

В настоящее время я пытаюсь получить из него клиентский пакет SUT и его PUT.Тем не менее, когда я пытаюсь PUT, он возвращает код состояния 403.

Это мой внутренний код:

const s3 = new AWS.S3({
  accessKeyId: keys.accessKeyId,
  secretAccessKey: keys.secretAccessKey
});

app.get('/api/upload', requireLogin, (req, res) => {
  let key = `${req.user.id}/${uuid()}.jpeg`
  s3.getSignedUrl('putObject', {
    Bucket: 'advanced-node-blog',
    ContentType: 'image/jpeg',
    Key: key
  },
  (err, url) => res.send({ key, url }));
});

На входе:

// presigned URL
const uploadConfig = await axios.get('/api/upload');

await axios.put(uploadConfig.data.url, file, {
  headers: {
    'Content-Type': file.type
  }
});

Когда я ПОЛУЧУ URL, я получу это сообщение:

The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.

Я исследовал эту ошибку и пришел к выводу, что мне не хватает signatureVersion: 'v4',.Однако, когда я добавил это, ошибка изменилась на Error parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'

ТАК, тогда я добавил region: 'us-east-2'.Затем ошибка изменилась на The request signature we calculated does not match the signature you provided. Check your key and signing method.

Я изменил созданные новые учетные данные и установил их, но все еще не прогрессировал ..

Есть какие-либо подсказки относительно того, что я могу делать неправильно?

Заранее спасибо!

1 Ответ

0 голосов
/ 23 сентября 2018

Проблема заключалась в сбое предполетной проверки, связанном со старой конфигурацией CORS моего контейнера.Это было исправлено путем добавления следующей конфигурации:

<CORSRule>
  <AllowedOrigin>*</AllowedOrigin>
  <AllowedMethod>GET</AllowedMethod>
</CORSRule>
<CORSRule>
  <AllowedOrigin>*</AllowedOrigin>
  <AllowedMethod>PUT</AllowedMethod>
</CORSRule>
...