10 媒体管线
模块目标
理解图片/音频等附件如何安全进入系统并被安全返回。
步骤一:实现拆解(执行链路)
- 远程抓取:
src/media/fetch.ts - 入库保存:
src/media/store.ts - 对外读取:
src/media/server.ts - 上游调用点: 自动回复与 outbound 发送链路
步骤二:细粒度讲解(小白版)
fetch.ts先保证“抓取安全”
- 使用 SSRF guard
- 限制重定向
- 限制最大大小
- 读取失败时给出结构化错误码
store.ts负责“落盘与清理”
- 媒体目录在 config state 下
- 文件名做安全清洗
- 自动 MIME 识别
- 默认大小上限与 TTL 清理
- 支持 URL 下载与本地文件写入两种来源
server.ts负责“短时分发”
GET /media/:id严格校验 id- 防路径穿越(safe open)
- 超时/过大/过期直接拒绝
- 响应后做单次清理,减少残留
- 设计思想
- 媒体应当“短生命周期 + 最小暴露面”
- 先安全再可用,不把任意路径直接暴露给外部