我可以使用预先签名的上传网址成功上传扩展名为.png的文件(image / png)。但是,当我尝试以同样的方式上传视频文件时,扩展名为.mov,我从Amazon S3获得403。我尝试过使用contentType movie / mov,video / quicktime,但它们都不起作用。当我将文件名更改为.png和image / png时,电影文件已正确上传。我只需要更改查看的扩展名...有没有人知道是否有一个支持的S3 Presigned File上传文件类型列表?我似乎无法在谷歌上找到任何细节...
我的s3存储桶政策:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mytempbucket/*"
}
]
}
编辑: 这就是我生成presignedurl的方式:
final GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(s3BucketName, objectKey);
generatePresignedUrlRequest.setMethod(HttpMethod.PUT);
generatePresignedUrlRequest.setExpiration(expirationDate.toDate());
generatePresignedUrlRequest.setContentType(contentType);
所以我已经将contentType字符串传递给我的服务器以生成预签名网址。
答案 0 :(得分:0)
用于上传的预签名网址的签名是根据多个参数构建的,其中一个参数是Content-Type
标题。
没有"列表"受支持的类型 - 但是,在生成签名网址时,您提供的Content-Type
必须与您在实际请求标头中提供的PUT
请求相同。< / p>
由于您没有显示任何代码或提及有关如何生成预先签名的网址或进行上传的任何细节,因此很难推测具体您是什么#39;做错了,但如果Content-Type
在签名和实际上传之间不匹配,那肯定不会有用。
如果您阅读了错误响应的响应正文,通常会有一个部分告诉您要签署的&#34;字符串&#34;应该是,基于失败请求的实际属性。无论在何种程度上,这与您用于生成签名的内容都不匹配,其中存在错误。