使用 S3 预签名上传上传电影文件 URL

Uploading movie file using S3 Presigned Upload URL

我可以使用预签名上传 url 成功上传扩展名为 .png (image/png) 的文件。但是,当我尝试以同样的方式上传扩展名为 .mov 的视频文件时,我从 Amazon S3 收到了 403。我试过使用 contentType movie/mov、video/quicktime,但它们都不起作用。当我将文件名更改为 .png 和 image/png 时,电影文件已正确上传。我只需要更改扩展名以供查看...有谁知道是否有支持 S3 预签名文件上传的文件类型列表?我似乎找不到任何细节谷歌搜索...

我的 s3 存储桶策略:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mytempbucket/*"
        }
    ]
}

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

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

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

上传 pre-signed URL 的签名由多个参数构建,其中之一是 Content-Type header.

没有 "list" 受支持的类型——但是无论您在生成带符号的 URL 时提供什么 Content-Type,都必须与您在PUT 请求的实际请求 headers。

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

如果您阅读错误响应的响应 body,通常会有一段告诉您 "string to sign" 应该是什么,具体取决于失败请求的实际属性。无论在何种程度上这与您用于生成签名的内容不匹配,这就是您的错误。