我正在尝试将视频文件从JS上传到S3存储桶,但现在收到400错误请求。我确定我可以正确设置所有内容,但可以做些什么。
我在这样的服务器上生成一个URL:
const client = new S3({
accessKeyId: 'id-ommited',
secretAccessKey: 'key-ommited',
region: 'eu-west-2',
useAccelerateEndpoint: true
});
const url = client.getSignedUrl('putObject', {
Bucket: 'screen-capture-uploads',
Key: 'video.webm',
Expires: 60 * 60,
ContentType: 'application/octet-stream'
});
这个URL在我的前端看起来不错,我像这样通过XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.open('PUT', body.url); // body.url being the presigned url
xhr.setRequestHeader('x-amz-acl', 'public-read');
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.send(blob); // blob being the webm binary
我使用的CORS设置仅允许从任何地方进行PUT
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我检查了一下,效果很好。 另外,IAM用户也有权将其放入存储桶
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::screen-capture-uploads/*"
]
}
]
}
到目前为止,我设法解决了自己的问题。我查看了其他答案,但没有找到对我有用的东西。有人对我有任何想法吗?
答案 0 :(得分:0)
我去获取了它产生的端点,然后将其直接放在浏览器中。原来我没有在使用的存储桶上启用传输加速!
这只是一个不好的请求,没有任何其他信息