#!/bin/bash # ============================================================================ # OSS 上传脚本(汇吉采官网 / 模板 07) # 把本地图片上传到阿里云 OSS,打印可直接粘贴到后台的 URL # # 关键发现(2026-07-30 实测): # /api/oss/upload 是 multipart 文件上传,必填: # - Authorization: Bearer (admin JWT) # - tenantId: <租户ID> ← 最关键的请求头!缺它会报 "传参错误" # - form 字段 file=@<图片> (application/octet-stream 也行,但 multipart 最稳) # 其余 module/bizType/path 等字段都是可选的,不传也能成功。 # 返回 data.path / data.url 即访问地址(url 带 ?x-oss-process 缩略参数)。 # # 用法: # ADMIN_TOKEN="eyJ..." bash scripts/upload-to-oss.sh # ============================================================================ set -e # ===== 1. 配置 ===== ADMIN_TOKEN="${ADMIN_TOKEN:-}" TENANT_ID="${TENANT_ID:-10626}" # 当前租户 10626(token 的 subject.tenantId) UPLOAD_URL="https://server.websoft.top/api/oss/upload" # 要上传的文件 FILES=( "/Users/gxwebsoft/VUE/website-template/outputs/01-about-company-team.jpg" "/Users/gxwebsoft/VUE/website-template/outputs/02-news-zoujinhuiicai-juyun.jpg" ) # ===== 2. 校验 token ===== if [ -z "$ADMIN_TOKEN" ]; then echo "❌ 请设置 ADMIN_TOKEN:" echo " ADMIN_TOKEN=\"eyJ...\" bash scripts/upload-to-oss.sh" echo " token 从 admin 后台 DevTools → Network → 任意 XHR → Request Headers → Authorization: Bearer xxx" exit 1 fi # ===== 3. 循环上传(tenantId 请求头是必填)===== for f in "${FILES[@]}"; do if [ ! -f "$f" ]; then echo "⚠️ 文件不存在: $f" continue fi echo "" echo "📤 上传: $f" resp=$(curl -sX POST "$UPLOAD_URL" \ -H "Authorization: Bearer $ADMIN_TOKEN" \ -H "tenantId: $TENANT_ID" \ -F "file=@${f};type=image/jpeg") echo " 响应: $resp" # 解析 URL(优先 data.url,其次 data.path) url=$(echo "$resp" | sed -n 's/.*"url":"\([^"?]*\).*/\1/p' | head -1) [ -z "$url" ] && url=$(echo "$resp" | sed -n 's/.*"path":"\([^"?]*\).*/\1/p' | head -1) if [ -n "$url" ]; then echo " ✅ 访问地址: $url" else echo " ⚠️ 未解析到 URL,上面是原始响应" fi done echo "" echo "============================================================" echo "✅ 上传完成。URL 用法:" echo " - 01-about-company-team.jpg → 关于我们右侧图" echo " (后端无独立 aboutImage 字段,模板用 public/images/template-07/about.jpg 兜底;" echo " 若要后台托管,需在站点配置加 aboutImage 字段并由前端读 siteInfo.config.aboutImage)" echo " - 02-news-zoujinhuiicai-juyun.jpg → 最新动态首图:写到 cms-article.image 字段" echo "============================================================"