aws s3 node js Метод SDK generatePutUrl возвращает разные результаты для localhost и развертывания на heroku. - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь управлять прямой загрузкой файлов на S3 в соответствии с рекомендациями heroku

  1. сначала нужно создать предварительно назначенный URL на своем сервере
  2. используйте это URL-адрес в клиенте для прямой загрузки изображения из браузера в корзину S3

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

https://mybucket.s3.eu-west-1.amazonaws.com/5e3ec346d0b5af34ef9dfadf_avatar.png?AWSAccessKeyId=<AWSKeyIdHere>&Content-Encoding=base64&Content-Type=image%2Fpng&Expires=1581172437&Signature=xDJcRBiA%2FmQF1qKhBZrnhFXWdaM%3D

, а ответ для установки heroku выглядит следующим образом:

https://mybucket.s3.u-west-1.amazonaws.com/5e3ee2bd1513b60017d85c6c_avatar.png?Content-Type=image%2Fpng&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<credentials-key-here>%2F20200208%2Fu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20200208T163315Z&X-Amz-Expires=900&X-Amz-Signature=<someSignature>&X-Amz-SignedHeaders=content-encoding%3Bhost

код сервера почти такой же, как в примерах:

const Bucket = process.env.BUCKET_NAME
const region = process.env.BUCKET_REGION

AWS.config = new AWS.Config({
accessKeyId: process.env.S3_KEY,
secretAccessKey: process.env.S3_SECRET,
region,
logger: console
})

const s3 = new AWS.S3()

async function generatePutUrl(inputParams = {}) {
  const params = { Bucket, ...inputParams }
  const { Key } = inputParams    
  const putUrl = await s3.getSignedUrl('putObject', params)
  const getUrl = generateGetUrlLocaly(Key)

  return {putUrl, getUrl}
}

единственное, что я могу себе представить, это SSL - я запускаю локальный сервер VIA http и по умолчанию heroku перебирает https ...

но я не понимаю, как это может повлиять Вот. Я буду признателен за любые полезные советы, как отладить и исправить это. благодарю вас.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Похоже, что ваша область памяти неверна. Разве это не должно быть eu-west-1 вместо u-west-1?

1 голос
/ 17 февраля 2020

Пожалуйста, обновите ваш BUCKET_REGION в переменных среды в настройках сервера Heroku с

u-west-1

до

eu- west-1

и перезапустите динамометры. Это может решить вашу проблему.

...