feat(upload): 支持 Agent 本地图片安全上传
This commit is contained in:
@@ -79,3 +79,5 @@ flowchart LR
|
||||
平台管理员可在管理页保存和测试 COS 配置。SecretId/SecretKey 使用 `COS_CONFIG_ENCRYPTION_KEY` 派生的 AES-256-GCM 密钥加密,读取接口不返回明文。连接测试会上传、读取并删除临时对象。
|
||||
|
||||
外部 API 图片统一归一到当前活动 COS:所有 URL 会先拒绝本机、私有网段、局域网和保留地址;与配置的 COS 公开域名或 CDN 域名同源时直接保存,其他公开 URL 经 DNS SSRF 防护、图片类型和 20 MB 大小校验后下载,并按内容哈希转存到 COS。没有活动 COS 配置时拒绝 URL 导入;全部图片准备成功后才创建作品或新验收轮次。该规则不自动追溯迁移历史图片内容。
|
||||
|
||||
外部 Agent 只有本地图片时使用现有 multipart 通道,不使用 Base64。Skill 计划只保存文件路径、大小和 SHA-256,执行时重新校验后流式上传;服务端以 Sharp 验证真实图片内容,再从临时文件写入活动 COS。
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
- 批注回复线程、只能撤回本人反馈并保留撤回记录
|
||||
- 客户项目链接、密码、姓名、访问期限和验收决定
|
||||
- API Key、审计日志、COS 前端配置、连接测试、私有地址拦截及外部 URL 安全转存
|
||||
- 内置 Agent 安全上传 Skill、双阶段确认脚本、回归测试和可分发 ZIP
|
||||
- 内置 Agent 安全上传 Skill、URL/本地文件双输入、双阶段确认脚本、回归测试和可分发 ZIP
|
||||
- SQLite/PostgreSQL 双运行时、迁移验证和 Docker 部署
|
||||
- 桌面端与移动端响应式页面
|
||||
|
||||
|
||||
@@ -71,6 +71,22 @@ curl -X POST http://localhost:3010/api/projects/1/works \
|
||||
|
||||
相同 `projectId + externalId` 的重试不会重复创建,响应包含 `idempotent: true`。异源图片成功转存后不再依赖原地址长期可用;任意图片校验或转存失败时不会创建作品记录。
|
||||
|
||||
### 本地文件上传
|
||||
|
||||
外部 Agent 只有本地图片时,不需要转换为 Base64。相同接口支持 `multipart/form-data`,重复使用 `images` 文件字段,并通过 Bearer API Key 鉴权:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:3010/api/projects/1/works \
|
||||
-H "Authorization: Bearer $DELIVERY_DESK_API_KEY" \
|
||||
-F "externalId=client-2026-002" \
|
||||
-F "title=本地生成作品" \
|
||||
-F 'tags=["#本地文件"]' \
|
||||
-F "images=@01.png" \
|
||||
-F "images=@02.png"
|
||||
```
|
||||
|
||||
URL 与本地文件不能在同一次请求中混用。文件顺序即展示顺序,第一张为封面;单张不超过 20 MB,服务端会校验真实图片内容并上传到活动 COS。
|
||||
|
||||
## 创建新验收轮次
|
||||
|
||||
每轮只能提交一个方案。标题、正文、标签和图片会形成不可修改的轮次快照;新轮次自动锁定上一轮。
|
||||
|
||||
@@ -57,6 +57,8 @@ JSON URL 导入依赖活动 COS 配置。同一 COS/CDN 域名的图片直接使
|
||||
|
||||
Agent 通过 API 新建作品或提交验收轮次时,使用 `.agents/skills/upload-delivery-desk-work`。API Key 只通过 `DELIVERY_DESK_API_KEY` 环境变量注入,不写入计划文件、文档或 Git。
|
||||
|
||||
Agent 可用 `--image-url` 提交公网图片,也可用 `--image-file` 将生成在运营电脑上的本地图片直接 multipart 上传;两种模式不混用,不把图片转换为 Base64。
|
||||
|
||||
```powershell
|
||||
python tests/test_upload_skill.py
|
||||
powershell -ExecutionPolicy Bypass -File scripts/package-upload-skill.ps1
|
||||
|
||||
Reference in New Issue
Block a user