桶: storage-s3-nkkj (华为云 OBS, cn-north-4)
域名: 公网直接URL https://storage-s3-nkkj.obs.cn-north-4.myhuaweicloud.com/<key>
(s3.fmode.cn CNAME 生效后可换 https://s3.fmode.cn/<key>, 相对路径报告不受影响)
铁律: 只能写 user/<我的userid>/ 前缀; 他人前缀 = 越权
user/<userid>/report/lapian/<平台简称>/<YYYYMMDD>/
├── report.html # 报告本体(入口)
├── video.mp4 # 原视频
├── audio.wav # 音频
├── transcript.json # 带时间戳转写
├── frames/f0001.jpg... # 抽帧切片
└── assets/ # 报告内嵌资源(analysis.json/comments.json/meta.json)
报告 HTML 里所有资源引用一律相对路径:
<source src="video.mp4"> <!-- 不是 https://... 绝对地址 -->
<img src="frames/f0001.jpg">
→ 整个前缀自包含, s3.fmode.cn 生效/换桶/镜像到本地, 报告零改动可用。
优先: POST <FEME_STUDIO_URL>/api/storage/credentials
Header: Authorization: Bearer <FEME_SESSION_TOKEN>
Body: {"prefix": "user/<userid>/report/lapian/"}
→ {access, secret, securityToken, expires} (限 prefix, 1小时)
过渡: studio credentials API 未上线时(2026-08 实测 404),
回退容器级 CLOUD_SDK_AK / CLOUD_SDK_SK —— 仍只写自己 user/<userid>/ 前缀
scripts/common.py get_storage_credentials() 已封装该回退逻辑, 上线后零改动切换。
storage-s3-nkkj.obs.cn-north-4.myhuaweicloud.com),
path-style(把 bucket 放 URL 路径)会报 VirtualHostDomainRequireds3, region=cn-north-4,
头部至少签 host;x-amz-content-sha256;x-amz-date(临时凭证再加 x-amz-security-token)x-amz-acl: public-read(obsutil 老版没有 setacl,
boto3 需 Config(s3={"addressing_style": "virtual"}))text/html; charset=utf-8, mp4=video/mp4,
wav=audio/wav, jpg=image/jpeg —— 不然浏览器直接下载而非渲染1 条 1 分钟视频整套产物 ≈ 25MB(视频23MB+音频2MB+帧+html), OBS 流量费忽略不计。