如何更改 Amazon S3 对象的内容类型

问题描述 投票:0回答:4

我的 Amazon S3 存储桶中的对象都是内容类型

application/octet-stream
。其中一些对象是 PDF,有时是图像,如
JPG
GIF
PNG
。如何将这些对象的内容类型更改为
images/jpeg
application/pdf
等?

可以通过亚马逊控制台批量完成吗?

我可以使用命令行吗?

或者也许通过 PHP?

amazon-web-services amazon-s3
4个回答
82
投票

这是您为所有类型为

*.png
的文件设置 Content-Type

的方法
aws s3 cp \
       s3://BUCKET-NAME/ \
       s3://BUCKET-NAME/ \
       --exclude '*' \
       --include '*.png' \
       --no-guess-mime-type \
       --content-type="image/png" \
       --metadata-directive="REPLACE" \
       --recursive

8
投票

您可以使用AWS sdk(php或其他)我将使用CLI展示它是如何工作的。要更改 S3 给定对象上的内容类型,您需要复制该对象并使用

REPLACE
标签更新元数据信息,以便它复制到自身,您可以使用 http://docs.aws.amazon.com/ 来实现cli/latest/reference/s3api/copy-object.html

aws s3api copy-object --bucket <bucket_name> \
    --content-type "images/jpeg" \
    --copy-source <bucket_name>/path/to/images.jpeg \
    --key path/to/images.jpeg \
    --metadata-directive "REPLACE"

7
投票
aws s3 ls \
  s3://<YOUR_BUCKET> --recursive | 
  awk '{print substr($0, index($0, $4))}' | 
  grep <FILE_EXTENSTION> | 
  while read -r line; do \
    aws s3api copy-object \
      --bucket <YOUR_BUCKET> \
      --acl "<ACL_POLICY_IF_NEEDED>" \
      --content-type "<REQUIRED_CONTENT_TYPE>" \
      --copy-source "<YOUR_BUCKET>/$line" \
      --key "$line" --metadata-directive "REPLACE"; \
  done

这样就可以了。分解命令:

  • aws s3 ls s3://<YOUR_BUCKET> --recursive
    => 这会列出您存储桶中的所有文件
  • awk '{print substr($0, index($0, $4))}' 
    => 这将删除日期等额外信息,只为您提供所有键列表
  • grep <FILE_EXTENSTION>
    => 这将过滤您想要更新内容类型的扩展名(例如 pdf/jpg)
  • while read -r line; do aws s3api copy-object --bucket <YOUR_BUCKET> --acl "<ACL_POLICY_IF_NEEDED>" --content-type "<REQUIRED_CONTENT_TYPE>" --copy-source "<YOUR_BUCKET>/$line" --key "$line" --metadata-directive "REPLACE"; done 
    => 这会将存储桶中所有已过滤的文件替换为您指定的内容类型

0
投票

我不想使用 s3api,因为它需要

Copy
IAM 权限。

我也不喜欢这种方法,因为它需要

List
IAM 权限:

aws s3 cp \
       s3://BUCKET-NAME/ \
       s3://BUCKET-NAME/

此同步方法效果完美,请注意我的不带扩展名的

all-mixtapes
文件位于根目录中并设置为
binary/octet-stream
,因此我需要显式地将其 Content-Type 更改为
text/html
:

aws s3 sync "$BUILD_DIR" "s3://$BUCKET_NAME" --exclude "*" --include "all-mixtapes" --content-type "text/html" $PROFILE_ARG --acl public-read --metadata-directive="REPLACE" --region $REGION --cache-control $CACHE_MAX_AGE 

不要省略必需的

 --metadata-directive="REPLACE"
参数。

© www.soinside.com 2019 - 2024. All rights reserved.