AWS S3 обновляет изображение, используя предварительно подписанный URL-адрес (запрос Axios-PUT)

#javascript #amazon-s3 #axios #jpeg

#javascript #amazon-s3 #аксиос #jpeg

Вопрос:

Я пытаюсь обновить локальный файл изображения JPG в корзину S3, используя запрос REST PUT и Axios.

Мне удалось отправить запрос PUT и получить положительный ответ от службы AWS S3, но то, что было загружено, — это не файл JPG, а файл JSON.

Это код, который я использую:

     //Create the FormData
    var data = new FormData();
    data.append('file', fs.createReadStream(image_path));


   //Send the file to File-system
   console.log("Sending file to S3...");
   const axiosResponse = await axios.put(image_signed_url, {
       data: data,
       headers: { 'Content-Type': 'multipart/form-data' }
     }).catch(function(error) {
      console.log(JSON.stringify(error));
      return null;
     });
 

Я уже пытался изменить заголовки на {'Content-Type': 'application/octet-stream' } , но получил тот же результат.

Комментарии:

1. Вы уверены, что image_signed_url сгенерирован для файла JPG?

2. @CyberEternal я делаю, иначе будет невозможно что-либо загрузить, поскольку подпись не должна совпадать.

Ответ №1:

Ему не удалось заставить AXIOS работать, чтобы загрузить изображение.

Модуль выборки узлов сделал это, отправив изображение в виде двоичного файла и указав «Content-type».

Если я попытаюсь сделать то же самое с помощью AXIOS, изображение всегда будет упаковано в форму-данные, и результатом будет файл JSON, загруженный в корзину S3 вместо изображения.

  //Send the file to File-system
console.log("Sending file to S3...");
const resp = await fetch(image_signed_url, {
    method: 'PUT',
    body: fs.readFileSync(image_path),
    headers: {
      'Content-Type': 'image/jpeg',
  },
}).catch( err => {
  console.log(err);
  return null;
});