AWS S3使用预先签名的URL更新图像(Axios-PUT请求)

acruukt9  于 2023-01-20  发布在  iOS
关注(0)|答案(1)|浏览(215)

我正在尝试使用REST PUT请求和Axios将本地JPG图像文件更新到S3存储桶中。
我设法发送了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' },但得到了相同的结果。

hxzsmxv2

hxzsmxv21#

它没有设法使AXIOS工作,以便上传图像。
node-fetch模块将图像作为二进制文件发送并指定“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;
});

相关问题