Amazon web services 如何更改AmazonS3对象的内容类型
我的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标记更新元数据信息,以便它复制到自身,您可以使用
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