s3-upload.md 3.0 KB

S3 个人空间发布规范(存储铁律见 feme-identity-storage 技能)

桶与路径

桶:   storage-s3-nkkj (华为云 OBS, cn-north-4)
域名: 【铁律 2026-08-29】公开链接一律 https://s3.fmode.cn/<key> (全小写 Host)
      链路: s3.fmode.cn(CDN) -> 回源 storage-s3-nkkj.obs-website.cn-north-4
            (OBS 静态网站托管) + CDN 响应头 Content-Disposition: inline
      桶本身不渲染网页, 必须经 CDN 才能静态渲染; OBS 原生域名只用于签名上传/内部校验
铁律: 只能写 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)
  • 平台简称: douyin / xiaohongshu / weixin / bilibili / tiktok / kuaishou / shortdrama
  • 同一条视频重跑: 直接覆盖同日期目录(幂等); 换版本建议换日期目录

相对路径(核心)

报告 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() 已封装该回退逻辑, 上线后零改动切换。

上传技术要点(实测踩坑)

  1. OBS 必须 virtual-hosted addressing: bucket 放进 Host (storage-s3-nkkj.obs.cn-north-4.myhuaweicloud.com), path-style(把 bucket 放 URL 路径)会报 VirtualHostDomainRequired
  2. SigV4 签名: service=s3, region=cn-north-4, 头部至少签 host;x-amz-content-sha256;x-amz-date(临时凭证再加 x-amz-security-token)
  3. 公开读: 每个对象 PUT 时带 x-amz-acl: public-read(obsutil 老版没有 setacl, boto3 需 Config(s3={"addressing_style": "virtual"}))
  4. Content-Type 要显式: html=text/html; charset=utf-8, mp4=video/mp4, wav=audio/wav, jpg=image/jpeg —— 不然浏览器直接下载而非渲染
  5. 上传完对每个产物做 HEAD 校验(200 才算成功), publish.py 已内置
  6. 二进制绝不进 git(S3 只存产物, git 仓库只存代码/模板/文档)

成本参考(2026-08 实测)

1 条 1 分钟视频整套产物 ≈ 25MB(视频23MB+音频2MB+帧+html), OBS 流量费忽略不计。