如何使用AWS CLI获取含表情符号的S3存储桶文件对象URL?
解决AWS S3私有桶对象URL批量生成及编码问题
一、用AWS CLI批量生成符合要求的URL
AWS CLI本身没有直接输出对象URL的命令,但可以结合工具快速生成,且编码完全匹配S3控制台的规则:
方案1:AWS CLI + jq(推荐)
通过s3api获取对象Key,用jq的URL编码过滤器直接构造URL:
aws s3api list-objects-v2 --bucket mybucket --query 'Contents[].Key' | jq -r '.[] | @uri | "https://mybucket.s3.amazonaws.com/\(.)"'
aws s3api list-objects-v2:获取桶内所有对象的Key列表jq的@uri:自动按S3要求编码特殊字符、表情和Unicode字符,和控制台生成的URL完全一致
方案2:纯AWS CLI + Python(无需额外工具)
如果服务器没装jq,可以用Python的标准库处理编码:
aws s3api list-objects-v2 --bucket mybucket --query 'Contents[].Key' --output text | xargs -I {} python3 -c "import urllib.parse; print(f'https://mybucket.s3.amazonaws.com/{urllib.parse.quote_plus(\"{}\")}')"
这里quote_plus会把空格编码为+,正好匹配示例中的格式。
二、S3的URL编码规则(手动构造参考)
如果需要自己实现编码逻辑,遵循以下规则:
- ASCII保留字符(
!、*、(、)、')直接保留,无需编码 - 空格编码为
+(不是普通URL的%20) - 其他ASCII特殊字符(
#、$、&等)转成百分号编码(比如%23) - Unicode字符/表情:先转成UTF-8字节流,再对每个字节做百分号编码(比如🔥会变成
%F0%9F%94%A5)
三、输出JSON格式结果
如果需要生成JSON数组格式的URL列表,调整命令即可:
aws s3api list-objects-v2 --bucket mybucket --query 'Contents[].Key' | jq -r '[.[] | @uri | "https://mybucket.s3.amazonaws.com/\(.)"]'
内容的提问来源于stack exchange,提问作者PiTao
相关产品推荐
相关产品推荐

