将AWS S3中所有文件的内容类型设置为application / octet-stream

时间:2018-08-01 12:07:19

标签: amazon-web-services amazon-s3

我是AWS S3存储桶的新手,我试图设置所有文件的权限以直接下载。我不希望我的视频或图像在浏览器中打开。我只希望它直接下载。

这是设置我的文件权限的方式。

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

是否可以为所有文件设置 Content-Type : application/octet-stream

谢谢!

2 个答案:

答案 0 :(得分:1)

响应标头与权限无关。

如果要为文件指定特定的Content-TypeContent-Disposition标头,则可以在对象元数据中指定它们,如下所示:

enter image description here

在此处查看来自AWS的完整教程:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html

例如使用AWS CLI上传文件时,可以同时指定Content-Type

  

aws s3api放置对象[--acl] [--body]   --bucket [--cache-control] [--content-disposition] [--content-encoding] [--content-language]   [--content-length] [--content-md5] [--content-type   ] ...

SDK提供类似的功能。

答案 1 :(得分:0)

据我所知,要么您无法控制即将进入的文件,要么无法修改将内容推送到s3的代码或服务。无论如何,我的选择是实现一个由s3:object触发的lambda,该s3:object使用源和目标相同的AWS.S3:copyobject,但元数据作为响应内容类型的application / octect-stream和response-content处置附件。放置好lambda后,应使用AWS CLI在现有文件上使用新的元数据递归复制现有文件。

更好地参考AWS文档中的lambda和相应的SDK参考。在git上查看AWS存储库,您可能会发现某些东西在同一轨道上。