首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改亚马逊S3对象的内容类型

如何更改亚马逊S3对象的内容类型
EN

Stack Overflow用户
提问于 2016-12-07 18:37:32
回答 3查看 21.4K关注 0票数 22

我的亚马逊S3存储桶中的对象都是application/octet-stream内容类型。其中一些对象是PDF,有时是JPGGIFPNG等图像。如何将这些对象的内容类型更改为images/jpegapplication/pdf等?

是否可以通过Amazon控制台批量完成?

我可以使用命令行吗?

或者也许是通过PHP?

EN

回答 3

Stack Overflow用户

发布于 2017-10-25 20:29:19

这就是为*.png类型的所有文件设置Content-Type的方法

代码语言:javascript
运行
复制
aws s3 cp \
       s3://BUCKET-NAME/ \
       s3://BUCKET-NAME/ \
       --exclude '*' \
       --include '*.png' \
       --no-guess-mime-type \
       --content-type="image/png" \
       --metadata-directive="REPLACE" \
       --recursive
票数 52
EN

Stack Overflow用户

发布于 2016-12-07 20:46:08

您可以使用AWS sdk (php或其他),我将使用CLI演示它是如何工作的。要更改S3给定对象的内容类型,您需要复制此对象,并使用REPLACE标记更新元数据信息,以便它复制到自身,您可以使用http://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html来实现这一点

代码语言:javascript
运行
复制
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"
票数 6
EN

Stack Overflow用户

发布于 2019-09-21 23:46:11

代码语言:javascript
运行
复制
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 =>这将列出您的keys
  • grep <FILE_EXTENSTION>类型中的所有文件这将删除额外的信息,如日期,只会给您提供content-type
  • 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 =>的全部列表这将过滤您要更新其content-type
  • 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 =>的扩展名(例如pdf/ => )这将使用您指定的内容类型替换您的存储桶中所有已过滤的文件=>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41015200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档