AWS S3 图像上传错误:不支持的正文负载对象
Posted
技术标签:
【中文标题】AWS S3 图像上传错误:不支持的正文负载对象【英文标题】:AWS S3 Image Upload Error: Unsupported Body Payload Object 【发布时间】:2021-03-12 02:27:58 【问题描述】:我尝试将本地图像上传到 s3 存储桶并不断获取
Error: Unsupported body payload object
图像可以是jpg
、jpeg
或png
。我读过图像只能作为base64
上传到s3,所以我使用readAsDataURL
将文件作为base64 字符串读取,然后用它创建一个缓冲区。
const reader = new FileReader()
reader.readAsDataURL(file)
const base64str = reader.result.replace(/^data:image\/\w+;base64,/, "");
const fileContent = Buffer.from(base64str,'base64')
上面的代码在 react 前端执行,fileContent
通过钩子设置为一个变量,然后该变量被 PUT 到我的服务器上
static uploadImage = (id, fileContent) =>
return axios.put(ROOT_URL + "/images/" + id, fileContent);
然后上传
await s3.upload(
Bucket: BUCKET_NAME,
Key: KEY,
Body: fileContent,
ContentType: TYPE,
).promise();
我尝试了许多在此网站上找到的不同解决方案,但仍然收到错误消息。不知道我错过了什么。
编辑:这是我发现有用的线程之一,但没有修复错误。 Uploading base64 encoded Image to Amazon S3 via Node.js
【问题讨论】:
【参考方案1】:不确定您在哪里读到的图像必须是 base64,但您可以简单地使用 fs
之类的内容读取文件内容,然后按原样将其上传到 S3。
// Read content from the file
const fileContent = fs.readFileSync(fileName);
// Setting up S3 upload parameters
const params =
Bucket: BUCKET_NAME,
Key: 'cat.jpg', // File name you want to save as in S3
Body: fileContent
;
// Uploading files to the bucket
await s3.upload(params).promise();
【讨论】:
我不认为这是可能的,我在前端读取文件反应所以我不能使用fs
@Spartan26783 您的问题是该文件通过 PUT 请求放在服务器上,然后放在 S3 上。我假设这发生在已经在服务器上之后。
“上面的代码在反应前端执行,其中fileContent
通过钩子设置为一个变量,并且该变量被 PUT-ed 到我的服务器”所以我将文件设置为变量使用 react hook,然后使用 put 请求将其发送到服务器。
有什么更新吗?我现在尝试了更多解决方案。知道为什么 AWS 可能不接受 base64 字符串吗?还在寻找fs
的解决方法,我唯一能想到的是FileReader
以上是关于AWS S3 图像上传错误:不支持的正文负载对象的主要内容,如果未能解决你的问题,请参考以下文章
从 url 下载文件并将其上传到 AWS S3 而不保存 - node.js
AWS S3存储桶Django 3.0用户配置文件图像上传访问错误
Javascript AWS SDK S3上传方法与正文流生成空文件