如何使用AWS CLI按MIME类型上传文件至S3存储桶
使用AWS CLI按指定MIME类型上传文件到S3存储桶
方法一:通过后缀筛选快速上传(依赖AWS CLI自动识别MIME)
如果你的系统默认MIME类型映射和mime.json一致,可直接用AWS CLI的--include/--exclude参数筛选目标后缀文件,操作如下:
步骤1:生成筛选参数
先从mime.json提取所有后缀,生成--include参数列表(需安装jq工具解析JSON):
INCLUDE_ARGS=$(jq -r 'keys[]' mime.json | sed 's/^/--include "*"/')
步骤2:执行上传命令
先排除所有文件,再通过生成的--include参数包含目标后缀文件:
aws s3 cp build/ s3://frontend-bucket --recursive --exclude "*" $INCLUDE_ARGS
注意:AWS CLI会自动根据文件后缀识别并设置
Content-Type,若你的mime.json包含自定义MIME映射,此方法不适用。
方法二:严格匹配自定义MIME映射上传(和Terraform逻辑一致)
若需要完全遵循mime.json的映射设置Content-Type,可结合文件遍历命令逐个处理文件:
Linux/macOS(Bash脚本)
#!/bin/bash BUILD_DIR="build" BUCKET="s3://frontend-bucket" MIME_JSON="mime.json" # 遍历build目录下的所有文件 find "$BUILD_DIR" -type f | while read -r FILE; do # 获取文件后缀(如.css) EXT=$(echo "$FILE" | sed -E 's/^.*(\.[^.]+)$/\1/') # 从mime.json读取对应Content-Type CONTENT_TYPE=$(jq -r --arg ext "$EXT" '.[$ext]' "$MIME_JSON") # 仅上传有对应MIME类型的文件 if [ "$CONTENT_TYPE" != "null" ]; then # 计算S3对象键:移除build目录前缀 OBJECT_KEY=$(echo "$FILE" | sed "s/^$BUILD_DIR\///") aws s3 cp "$FILE" "$BUCKET/$OBJECT_KEY" --content-type "$CONTENT_TYPE" fi done
Windows(PowerShell脚本)
$buildFolder = "build" $bucket = "s3://frontend-bucket" $mimeFile = "mime.json" # 将mime.json转为哈希表 $mimeMap = Get-Content $mimeFile | ConvertFrom-Json # 遍历所有文件 Get-ChildItem $buildFolder -Recurse -File | ForEach-Object { $extension = $_.Extension # 检查后缀是否在自定义MIME映射中 if ($mimeMap.PSObject.Properties.Name -contains $extension) { $contentType = $mimeMap.$extension # 生成S3对象键 $objectKey = $_.FullName.Substring($buildFolder.Length + 1) aws s3 cp $_.FullName "$bucket/$objectKey" --content-type $contentType } }
注意事项
- 确保已安装
jq工具(Linux/macOS用包管理器,Windows可通过Chocolatey安装) - AWS CLI需配置好S3上传权限
- 脚本中的路径和桶名请根据实际情况修改
内容的提问来源于stack exchange,提问作者LP13
相关产品推荐
相关产品推荐

