1

我可以使用预签名的上传 url 成功上传带有 .png 扩展名(图像/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/*"
        }
    ]
}

编辑:这就是我生成我的预签名网址的方式:

final GeneratePresignedUrlRequest generatePresignedUrlRequest = 
                    new GeneratePresignedUrlRequest(s3BucketName, objectKey);
            generatePresignedUrlRequest.setMethod(HttpMethod.PUT); 
            generatePresignedUrlRequest.setExpiration(expirationDate.toDate());
            generatePresignedUrlRequest.setContentType(contentType);

所以我已经将 contentType 字符串传递给我的服务器以生成预签名的 url。

4

1 回答 1

0

用于上传的预签名 URL 的签名由许多参数构成,其中一个是Content-Type标头。

没有受支持类型的“列表”——但是Content-Type在生成签名 URL 时提供的任何内容都必须与在PUT请求的实际请求标头中提供的内容相同。

由于您没有显示任何代码或提及有关如何生成预签名 URL 或进行上传的任何细节,因此很难具体推测您做错了什么,但如果Content-Type签名和实际上传,肯定不行。

如果您阅读错误响应的响应正文,通常会有一个部分根据失败请求的实际属性告诉您“要签名的字符串”应该是什么。无论在何种程度上这与您用来生成签名的内容不匹配,这都是您的错误。

于 2015-12-26T19:59:34.973 回答