forked from wangziqi/gongxue-base
feat: recheck content assets
This commit is contained in:
@@ -64,6 +64,12 @@ POST /api/tenant-content/assets/sign-download
|
||||
POST /api/tenant-content/assets/sign-preview
|
||||
```
|
||||
|
||||
后台资源复检 worker:
|
||||
|
||||
```bash
|
||||
npm --workspace @tiku-saas/worker run assets:once
|
||||
```
|
||||
|
||||
## 标准上传流程
|
||||
|
||||
后台前端上传 PDF、图片、视频或资料包时必须走下面流程:
|
||||
@@ -74,6 +80,8 @@ POST /api/tenant-content/assets/sign-preview
|
||||
4. 调用 `POST /api/tenant-content/assets/confirm-upload`,由后端读取对象元数据并比对大小、MIME、SHA-256。
|
||||
5. 校验通过且 `publish=true` 时,后端将资源置为 `status=active`、`uploadStatus=verified`。
|
||||
6. 学生端只能下载或预览 `active + verified` 的托管对象资源。
|
||||
7. 生产环境定时运行 assets worker,复检 `pending/verified` 托管对象的大小、MIME、SHA-256 等元数据。
|
||||
8. 如果复检发现对象丢失、跨租户 objectKey、大小/MIME/checksum 不一致,worker 会把资源置为 `uploadStatus=failed`,并将 `active` 资源退回 `draft`,同时写入 `security_flags.assetRecheckFailed=true` 和 `audit_logs`。
|
||||
|
||||
确认上传示例:
|
||||
|
||||
@@ -94,6 +102,7 @@ POST /api/tenant-content/assets/sign-preview
|
||||
- `tencent_cos` 使用 COS HEAD Object 预签名请求读取元数据。
|
||||
- `supabase_storage` 使用 Storage list metadata 做最小存在性/大小校验。
|
||||
- 如果 provider 无法返回 SHA-256,后端会记录 `checksumUnavailable=true`,生产建议上传时写入对象自定义元数据,例如 `x-oss-meta-sha256` 或 `x-cos-meta-sha256`。
|
||||
- worker 的复检证据写入 `verification_details.assetWorker`,包含 `lastCheckedAt`、`lastResult`、`expected`、`observed`、`issues`,便于租户后台定位资源异常。
|
||||
|
||||
## 安全规则
|
||||
|
||||
@@ -106,6 +115,7 @@ POST /api/tenant-content/assets/sign-preview
|
||||
- 下载和视频播放必须先经过 API 权限判断,再下发短期签名 URL。
|
||||
- 云厂商 AccessKey、SecretKey、Service Role Key 只存在服务端环境变量,不返回前端。
|
||||
- `content_assets` 是资源唯一台账,前端不得绕过台账直接访问私有 bucket。
|
||||
- 前端不能把 `uploadStatus=failed` 或 `status=draft` 的资源继续展示为可下载;列表仍返回时应展示“资料处理中”或“资源异常已下架”,真正下载/预览会被后端拒绝。
|
||||
|
||||
## 环境变量
|
||||
|
||||
@@ -149,6 +159,15 @@ SUPABASE_STORAGE_URL=https://your-project.supabase.co/storage/v1
|
||||
SUPABASE_STORAGE_SERVICE_KEY=
|
||||
```
|
||||
|
||||
assets worker:
|
||||
|
||||
```text
|
||||
WORKER_ASSET_BATCH_SIZE=50
|
||||
WORKER_ASSET_MIN_AGE_SECONDS=300
|
||||
WORKER_ASSET_RECHECK_INTERVAL_SECONDS=86400
|
||||
WORKER_ASSET_REQUEST_TIMEOUT_MS=10000
|
||||
```
|
||||
|
||||
## 生产建议
|
||||
|
||||
- 阿里云和腾讯云生产环境优先用 STS/临时密钥或 RAM/CAM 最小权限账号。
|
||||
@@ -156,7 +175,7 @@ SUPABASE_STORAGE_SERVICE_KEY=
|
||||
- 图片、PDF、视频分别设置合理的 CORS,只允许前端域名和小程序业务域名访问。
|
||||
- 开启对象版本控制、生命周期、跨区域复制或定时备份,满足后续容灾要求。
|
||||
- 视频资源已接入 SVIP/播放次数校验、短期签名和播放日志;生产阶段继续补转码、动态水印、CDN 防盗链和播放统计。
|
||||
- 大文件上传已经支持 API 即时确认;后续可增加 worker 做异步复检、杀毒、转码、水印和 CDN 刷新。
|
||||
- 大文件上传已经支持 API 即时确认和 worker 元数据复检;后续继续补杀毒、转码、水印和 CDN 刷新。
|
||||
|
||||
## 官方依据
|
||||
|
||||
|
||||
Reference in New Issue
Block a user