amazon-web-services - s3 presigned url multipart formdata上传错误:签名不匹配
问题描述
我从 aws 获得一个预签名的 url,并使用它来请求(PUT)一个 zip 文件。我得到签名不匹配。
获得预签名网址时:
const params = {
Bucket: myBucket,
Key: myKey,
Expires: 60*60,
ACL: '**-**-**',
ContentType: 'application/x-zip-compressed'};
请求时:
const formData = new FormData();
formData.append('file', file);
formData.append('filename', file.name);
fetch(url, {
method: 'PUT',
headers: {
'Content-Type': 'application/x-zip-compressed',
},
body: formData
})
解决方案
无论ACL
您在签名中使用什么值,都需要在请求标头中发送,如'x-amz-acl': '**-**-**'
.
另请注意,S3PUT
不期望FormData
- 它期望仅body
包含对象的原始字节。这不是错误的原因,但是一旦您更正了签名错误,您也需要更改它,以便获得有效、可用的上传。
推荐阅读
- javascript - 角度守卫我如何从 auth.service.ts 获得价值(用户登录与否)
- vue.js - 如果 v-model 为空,VueJS 将第一个单选按钮设置为选中
- sas - 如何解释对数指数非线性回归?
- java - @Focus 多次调用 - Eclipse e4
- python - (python-telegram-bot)AttributeError:“更新”对象没有属性“机器人”
- intellij-idea - 无法运行程序“java”(在目录“/home/user/corda/build/nodes/Notary”中):错误=2,没有这样的文件或目录
- javascript - 被点击
- 里面作为孩子的项目
- 使用 React 的父级
- 里面作为孩子的项目
- ruby-on-rails - .idea/workspace.xml 到底是什么?
- sql - 是否有任何解决方案可以将此 SAS 代码写入“proc sql”进程?
- bash - 使用 shell 在 unix 中查找文件