Skip to content

Commit a66e79d

Browse files
committed
```
feat(bash): 添加阿里云OSS上传脚本并优化环境变量加载 - 实现 aliyun-oss-put.sh 脚本,支持阿里云OSS文件上传功能 - 采用脚本专属环境文件约定 (aliyun-oss-put.env 和 aliyun-oss-put.env.local),避免与通用 .env 文件冲突 - 优化环境变量加载逻辑,仅当工作目录与脚本目录不同时才加载工作 目录下的环境文件 - 简化请求头构建过程,直接构造而无需辅助函数 - 添加内容SHA256校验和OSS日期头部支持 - 完成真实OSS上传smoke test验证 更新跨平台单文件脚本最佳实践文档,明确脚本专属env文件约定。 ```
1 parent a03d4f3 commit a66e79d

3 files changed

Lines changed: 20 additions & 30 deletions

File tree

docs/plans/2026-03-18-001-feat-add-bash-aliyun-oss-upload-script-plan.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ origin: docs/brainstorms/2026-03-18-aliyun-oss-upload-script-brainstorm.md
441441
### Quality Gates
442442

443443
- [ ] 至少完成一次离线签名校验
444-
- [ ] 至少完成一次真实 OSS 上传 smoke test
444+
- [x] 至少完成一次真实 OSS 上传 smoke test
445445
- [x] 更新 [docs/跨平台单文件脚本最佳实践.md](/home/administrator/projects/env/powershellScripts/docs/跨平台单文件脚本最佳实践.md)
446446
- [x] 若新增 `scripts/bash/README.md`,其示例命令与最终脚本参数保持一致
447447

docs/跨平台单文件脚本最佳实践.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,21 +149,21 @@
149149
- 需要更强的结构化日志、重试、容错
150150
- 需要更复杂的元数据、标签、鉴权流程
151151

152-
### .env / .env.local 约定
152+
### 脚本专属 env 文件约定
153153

154-
这个脚本支持在当前工作目录自动读取
154+
这个脚本不是读取通用 `.env`,而是读取**脚本专属文件名**
155155

156-
1. `.env`
157-
2. `.env.local`
156+
1. `aliyun-oss-put.env`
157+
2. `aliyun-oss-put.env.local`
158158

159159
优先级为:
160160

161161
1. 当前 shell 环境变量
162-
2. `.env.local`
163-
3. `.env`
162+
2. `aliyun-oss-put.env.local`
163+
3. `aliyun-oss-put.env`
164164

165165
这样做的目的很简单:
166166

167-
- `.env` 适合放通用默认值
168-
- `.env.local` 适合放本机或临时凭据
167+
- `aliyun-oss-put.env` 适合放这个脚本的共享默认值
168+
- `aliyun-oss-put.env.local` 适合放本机或临时凭据
169169
- 已经 `export` 到 shell 的值优先级最高,避免被文件悄悄覆盖

scripts/bash/aliyun-oss-put.sh

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,10 @@ load_dotenv_files() {
248248
INITIAL_ENV_VARS="$(env | LC_ALL=C cut -d= -f1)"
249249
load_env_file_if_present "$script_dir/aliyun-oss-put.env"
250250
load_env_file_if_present "$script_dir/aliyun-oss-put.env.local"
251-
load_env_file_if_present "$work_dir/aliyun-oss-put.env"
252-
load_env_file_if_present "$work_dir/aliyun-oss-put.env.local"
251+
if [ "$work_dir" != "$script_dir" ]; then
252+
load_env_file_if_present "$work_dir/aliyun-oss-put.env"
253+
load_env_file_if_present "$work_dir/aliyun-oss-put.env.local"
254+
fi
253255
}
254256

255257
# 解析 CLI 参数,命令行显式传值始终高于环境变量默认值。
@@ -462,30 +464,18 @@ prepare_request_values() {
462464
build_canonical_headers() {
463465
local canonical_headers=""
464466

465-
append_canonical_header() {
466-
local header_name="$1"
467-
local header_value="$2"
468-
469-
if [ -n "$canonical_headers" ]; then
470-
canonical_headers="${canonical_headers}"$'\n'
471-
fi
472-
473-
canonical_headers="${canonical_headers}${header_name}:${header_value}"
474-
}
475-
476-
append_canonical_header "content-md5" "$FILE_MD5_BASE64"
477-
append_canonical_header "content-type" "$CONTENT_TYPE"
478-
append_canonical_header "content-length" "$FILE_SIZE"
467+
canonical_headers="${canonical_headers}content-length:${FILE_SIZE}"$'\n'
468+
canonical_headers="${canonical_headers}content-md5:${FILE_MD5_BASE64}"$'\n'
469+
canonical_headers="${canonical_headers}content-type:${CONTENT_TYPE}"$'\n'
470+
canonical_headers="${canonical_headers}x-oss-content-sha256:${CONTENT_SHA256}"$'\n'
471+
canonical_headers="${canonical_headers}x-oss-date:${ISO_8601_DATE}"$'\n'
479472

480473
if [ "$OVERWRITE_MODE" != "true" ]; then
481-
append_canonical_header "x-oss-forbid-overwrite" "true"
474+
canonical_headers="${canonical_headers}x-oss-forbid-overwrite:true"$'\n'
482475
fi
483476

484-
append_canonical_header "x-oss-content-sha256" "$CONTENT_SHA256"
485-
append_canonical_header "x-oss-date" "$ISO_8601_DATE"
486-
487477
if [ -n "${ALIYUN_SECURITY_TOKEN:-}" ]; then
488-
append_canonical_header "x-oss-security-token" "${ALIYUN_SECURITY_TOKEN}"
478+
canonical_headers="${canonical_headers}x-oss-security-token:${ALIYUN_SECURITY_TOKEN}"$'\n'
489479
fi
490480

491481
printf '%s' "$canonical_headers"

0 commit comments

Comments
 (0)