Files
probably-rendering-one-more…/docs/s3-media.md

44 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 内容图片存储与本次迁移
内容图片存放于现有 RustFS(S3 兼容)`prompt` bucket;PostgreSQL `assets` 保存媒体 ID、对象键、SHA-256、大小与尺寸。代码只保留引用及必要的矢量设计源稿。
## 迁移结果(2026-10-29)
- 从 Git 工作树移除 603 个 PNG 路径,共 38,085,328 字节(约 36.3 MiB)。全部路径及逐文件校验信息见 `apps/waterfall-wiki/src/content/managed-media.json`。
- 内容寻址去重后为 572 个 S3 对象,键为 `repository-media/sha256/<sha256>.png`。全部上传后逐个 GET 读回并校验原始字节,再在数据库事务中登记元数据;未覆盖或删除现有媒体。
- 通过现有生产管理员认证包装器,经 `/api/media/{id}` 再次读回全部 572 个对象,内容类型、字节数与 SHA-256 均通过。
- 清单 SHA-256:`1e13d87e204de5c4483944f381823e539bf194d124a2e5b3e1ac98c08abddb35`。
- 两份 Studio 模板 JSON 的 334 处 Base64 图片均对应已迁移对象,改为媒体 ID 引用。SVG 导出时从认证媒体 API 读取并临时嵌入,下载的 SVG 仍自包含。
- 保留 `public/brand-mark.svg`(品牌图形)与 `public/learning-skills/cover.svg`(可编辑设计源稿);测试中少量合成图片字符串及运行时图片编码逻辑属于必要代码,不是业务素材副本。
- 本次直接迁移数据;未构建、未部署、未运行 CI/CD,未改写 Git 历史。旧提交仍含图片,当前线上镜像仍有原来的文件,均未破坏性清理。
## 按目录说明移除范围
| 路径 | 文件数 | 用途与替代 |
| --- | ---: | --- |
| `apps/waterfall-wiki/seed/characters/reference/*.png` | 15 | 参考人物素材,导入器改从媒体 API 取原图并校验 |
| `apps/waterfall-wiki/seed/characters/original/*.png` | 4 | 新生成人物素材,同上 |
| `apps/waterfall-wiki/public/skills/**/*.png` | 4 | 技能参考与示例图,旧路径映射至媒体 API |
| `apps/waterfall-wiki/public/learning-skills/cover.png` | 1 | 学习系列封面,发布器读取 S3,旧 URL 保留兼容 |
| `content/layout-reference/assets/**/*.png` | 573 | 版式源图、构件、蒙版、标注和重建图,作者工具读取外部缓存或媒体 API |
| `docs/wiki-saas/screenshots/*.png` | 6 | 验收截图,文档链接改指向媒体 API |
## 读取与恢复
旧五个公开文件路径在下一次部署此代码时通过 Next rewrites 指向现有媒体 ID;访问权限沿用原有管理员认证。预览接口直接读取 S3。运行镜像只包含人物包 JSON 和媒体清单,不再包含 PNG。
作者工具 `scripts/managed-media.mjs` 从媒体 API 下载并验证图片;可设置 `MEDIA_BASE_URL`(默认现有服务器地址)与进程环境中的 `PROMPT_TOKEN`。不要将令牌写入源码、命令参数或报告;重定向不会携带凭据。运行于服务器的作者脚本可通过现有 `auth-cli.cjs run` 包装器,在同源 `MEDIA_BASE_URL=http://127.0.0.1:3000` 下使用进程内认证。
也可设置 `MEDIA_SOURCE_ROOT` 指向仓库外缓存,目录结构与清单相同。本次原文件备份位于仓库外路径:`/Users/zzyang/ProjectMedia/output/s3-media-migration-20261029/source`。该备份不提交 Git。
`node scripts/managed-media.mjs /absolute/external-cache` 可下载整个清单到外部目录,拒绝写入仓库。版式封面生成器要求 `MEDIA_OUTPUT_FILE` 指向仓库外;分割工具使用仓库外 `MEDIA_AUTHORING_ROOT`。产出新素材后先上传 S3、登记数据库与清单,再更新引用;不要提交 PNG 或把图片转成 Base64 塞回 JSON。
灾难恢复必须同时保留数据库备份和 S3 bucket。清单只保存索引,不替代数据库或对象存储备份。新环境需恢复所需对象及其 `assets` 元数据;隔离集成测试使用合成图片,不读取生产素材。
## 检查结果
- 16 项 Studio 单元测试、3 项清单与缓存测试、2 项人物包校验测试通过;JavaScript 语法及 `git diff --check` 通过。
- Studio `tsc --noEmit --incremental false` 通过。
- Wiki 同一类型检查因本地已有依赖未安装完整(`nodemailer` 无法解析)未通过;本次未安装依赖、未运行 Next typegen。
- 完整集成测试、应用构建和部署未执行。用户要求此次不用 CI/CD;工作分支与 PR 不触发当前仅 main push 的工作流。用户后续手动合并 main 将按现有规则触发 CI/CD,须自行安排合并时机。