S3 загрузка и обслуживание изображения с предварительно подписанным URL - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь загрузить изображение в свою корзину S3 через предварительно подписанный URL-адрес.Все работает хорошо, за исключением того, что когда я нажимаю на общедоступный URL для этого изображения, браузер загружает его вместо того, чтобы показывать его.Когда я загружаю одно и то же изображение из консоли AWS, все работает хорошо, и изображение отображается в браузере.

Вот как я это делаю:

ГенерацияПредварительно подписанный URL-адрес:

s3.getSignedUrl('putObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
})

Загрузка файла с помощью axios:

const response = await axios.put(url, formElement.files[0])

Должен ли я сконфигурировать заголовки где-нибудь в процессе, чтобы сообщить S3 тип mime контентаЯ загружаю или как-то так?

Спасибо за помощь

1 Ответ

0 голосов
/ 20 октября 2018

Это можно сделать в двух местах.

Если вы заранее знаете тип изображения, то вы можете явно установить ContentType в параметрах s3.getSignedUrl.Это происходит потому, что эти параметры будут закодированы и переданы с подписанным запросом пут: getSignedUrl docs / putObject docs .Например:

s3.getSignedUrl('putObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds,
    ContentType: 'image/png'
});

В качестве альтернативы вы можете установить заголовок Content-Type в запросе Axios REST PUT docs , например:

const response = await axios.put(
  url,
  formElement.files[0],
  { headers: { 'Content-Type': formElement.files[0].type } });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...