Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何更改AmazonS3对象的内容类型_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services 如何更改AmazonS3对象的内容类型

Amazon web services 如何更改AmazonS3对象的内容类型,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我的AmazonS3存储桶中的对象都是内容类型application/octet-stream。其中一些对象是PDF,有时像JPG,GIF,PNG。如何将这些对象的内容类型更改为images/jpeg、application/pdf等 可以通过Amazon控制台批量完成吗 我可以使用命令行吗 或者通过PHP?您可以使用AWS sdk(PHP或其他),我将展示它如何使用CLI工作。要更改S3给定对象上的内容类型,您需要复制此对象并使用REPLACE标记更新元数据信息,以便它复制到自身,您可以使用

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

可以通过Amazon控制台批量完成吗

我可以使用命令行吗

或者通过PHP?

您可以使用AWS sdk(PHP或其他),我将展示它如何使用CLI工作。要更改S3给定对象上的内容类型,您需要复制此对象并使用
REPLACE
标记更新元数据信息,以便它复制到自身,您可以使用

aws s3api复制对象--bucket\ --内容类型“图像/jpeg”\ --将源/路径/复制到/images.jpeg\ --密钥路径/to/images.jpeg\ --元数据指令“替换”
这是为所有类型为*.png的文件设置
内容类型的方法

aws s3 cp \
       s3://BUCKET-NAME/ \
       s3://BUCKET-NAME/ \
       --exclude '*' \
       --include '*.png' \
       --no-guess-mime-type \
       --content-type="image/png" \
       --metadata-directive="REPLACE" \
       --recursive
aws s3 ls\
s3://--递归|
awk'{print substr($0,index($0,$4))}'
格雷普|
而read-r行;做\
aws s3api复制对象\
--水桶\
--acl“”\
--内容类型“”\
--复制源“/$line”\
--键“$line”--元数据指令“REPLACE”\
完成
这样就行了。分解命令:

  • aws s3 ls s3://--recursive
    =>这将列出存储桶中的所有文件
  • awk'{print substr($0,index($0,$4))}
    =>这将删除诸如日期之类的额外信息,并只提供所有键列表
  • grep
    =>这将过滤要更新其内容类型的扩展名(如pdf/jpg)
  • 读取-r行时
    ;aws s3api是否复制对象--bucket--acl“”--内容类型“”--复制源“/$line”--键“$line”--元数据指令“REPLACE”;完成
    =>这将用指定的内容类型替换bucket中的所有过滤文件

很酷,但首先我需要选择具有特定扩展名的所有对象,如.jpgThanks!正是在不得不写一个完整的脚本的过程中才这样做,这真的很有帮助。但是,在Windows AWS CLI中运行时,请确保删除
--exclude
--include
选项值中的引号,因为它们将被忽略-这导致CLI仅复制my S3中的所有文件,而不考虑其扩展名。有一次我做了
--exclude*--include*.png
,效果很好。下面是官方文件:如果使用REPLACE,复制的对象将只具有CLI命令指定的元数据值。请注意,如果正在使用以下任何参数:--content type、content language、--content encoding、--content disposition、--cache control或--expires,如果希望复制的对象具有指定的元数据值,则需要为非多部分复制指定--metadata directive REPLACE。“()有没有办法不显示输出并且必须退出每次更新?是否可以将复制对象命令重定向到/dev/null
aws s3 cp \
       s3://BUCKET-NAME/ \
       s3://BUCKET-NAME/ \
       --exclude '*' \
       --include '*.png' \
       --no-guess-mime-type \
       --content-type="image/png" \
       --metadata-directive="REPLACE" \
       --recursive
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