aws несоответствие подписанного запроса URL при загрузке - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь загрузить изображение, используя предопределенный URL-адрес

const s3Params = {
  Bucket: config.MAIN_BUCKET,
  Key: S3_BUCKET + '/'+fileName,
  ContentType: fileType,
  Expires: 900,
  ACL: 'public-read'
};
const s3 = new AWS.S3({
  accessKeyId: config.accessKeyId,
  secretAccessKey: config.secretAccessKey,
  'region': config.region
});
const url = await s3.getSignedUrlPromise('putObject', s3Params)
return url

Я получаю URL-адрес, например,

https://s3.eu-west-1.amazonaws.com/bucket/folder/access.JPG?AWSAccessKeyId=xxxx&Content-Type=multipart%2Fform-data&Expires=1580890085&Signature=xxxx&x-amz-acl=public-read

  1. Я попытался загрузить файл с типом контента image / jpg, multipart / form-data.
  2. Попытка создания URL-адреса без типа файла и загрузки.
  3. пробный метод put и post

но, похоже, ничего не работает

Ошибка всегда:

Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи.

У учетных данных доступа есть соответствующие разрешения, потому что эти файлы для загрузки подходят при попытке загрузки через s3 putobject (хотя api вместо предопределенного URL)

Редактировать:

Кажется, что почтальон отправляет тип контента как multipart / form-data; граница = -------------------------- 336459561795502380899802. здесь граница добавлена ​​доп. как это исправить?

1 Ответ

0 голосов
/ 06 февраля 2020

Я тестировал через форму-данные на почтальоне. но функция getsignedUrl () этого не поддерживает. Пробовал использовать бинарный файл и все работало нормально. Для multipart, кажется, есть другая функция в aws sdk

...