MODEL COVER · IMPLEMENTED

模型截图封面验证报告

截图封面功能已实施并完成下列真实浏览器验证:视口截图作为受控图片资产与工程关联保存,列表读取真实封面,模型列表按创建时间倒序显示。

2026-09-05 · http://127.0.0.1:6180 · Microsoft Edge · 教员

Markdown 报告
14 / 14证据项通过
0非 PASS 证据项
15图片文件已校验

最终模型封面

实测模型-牛奶卡车-已验证-20260905

项目 156 最终封面
项目 156 最终封面 · 点击查看原图
项目 / 最终状态
156 / PUBLISHED
工程版本 / 封面资产
204 / 2055
图片规格
640 × 346 · 17821 字节
封面持久化证据
{
  "id": "156",
  "name": "实测模型-牛奶卡车-已验证-20260905",
  "coverUri": "fsvc://unreal-tran/image/2026/09/05/67b2a5d15f9c1fc47a0a760f28fd2e2e.jpg",
  "versionId": "204",
  "projectVersion": 18,
  "coverAssetId": "2055",
  "sha256": "7b7cc4cc75a3a355f26e2ff15ae1d26b5964ad7b370061691a94ce5f6f4b9158",
  "bytes": 17821,
  "width": 640,
  "height": 346,
  "image": "screenshots/02-truck-new-view.jpg",
  "cache": "no-cache, private"
}

实测模型-狐狸动画-已验证-20260905

项目 157 最终封面
项目 157 最终封面 · 点击查看原图
项目 / 最终状态
157 / DRAFT
工程版本 / 封面资产
202 / 2067
图片规格
640 × 346 · 13163 字节
封面持久化证据
{
  "id": "157",
  "name": "实测模型-狐狸动画-已验证-20260905",
  "coverUri": "fsvc://unreal-tran/image/2026/09/05/c09a49efd4423dcf8ccbc46b46d1e209.jpg",
  "versionId": "202",
  "projectVersion": 15,
  "coverAssetId": "2067",
  "sha256": "6ace0cf199626a3e8ecd4b360d62c0a6ec9b39309293554765dca8128a2ec5e9",
  "bytes": 13163,
  "width": 640,
  "height": 346,
  "image": "screenshots/06-fox-restored-cover.jpg",
  "cache": "no-cache, private"
}

最终列表现场

两条保留模型的真实封面与创建时间倒序列表
两条保留模型的真实封面与创建时间倒序列表 · 点击查看原图

验证记录

通过数只统计 status 为 PASS 的记录;故障注入中预期的 503、401 或 404 不等于用例失败。

1. 首次手动保存卡车:截取当前场景并绑定JPEG封面

PASS
检查细节
{
  "details": {
    "id": "156",
    "name": "实测模型-牛奶卡车-已验证-20260905",
    "coverUri": "fsvc://unreal-tran/image/2026/09/05/4e12ee526680085650c48934bc0305e1.jpg",
    "versionId": "203",
    "projectVersion": 13,
    "coverAssetId": "2040",
    "sha256": "15caa821e90a70d5b0f8ba1554c0d0d6db332a9b5e53b0d5e94de24d7663533e",
    "bytes": 17889,
    "width": 640,
    "height": 346,
    "image": "screenshots/01-truck-cover.jpg",
    "cache": "no-cache, private"
  },
  "helpersRestored": true
}
浏览器现场
浏览器现场 · 点击查看原图
实际生成封面
实际生成封面 · 点击查看原图

2. 更换卡车视角再次保存:替换当前封面且辅助控件恢复

PASS
检查细节
{
  "details": {
    "id": "156",
    "name": "实测模型-牛奶卡车-已验证-20260905",
    "coverUri": "fsvc://unreal-tran/image/2026/09/05/67b2a5d15f9c1fc47a0a760f28fd2e2e.jpg",
    "versionId": "204",
    "projectVersion": 18,
    "coverAssetId": "2055",
    "sha256": "7b7cc4cc75a3a355f26e2ff15ae1d26b5964ad7b370061691a94ce5f6f4b9158",
    "bytes": 17821,
    "width": 640,
    "height": 346,
    "image": "screenshots/02-truck-new-view.jpg",
    "cache": "no-cache, private"
  },
  "helpersRestored": true
}
浏览器现场
浏览器现场 · 点击查看原图
实际生成封面
实际生成封面 · 点击查看原图

3. 更换相机视角更新封面,已发布历史版本保留旧封面

PASS
检查细节
{
  "details": {
    "oldVersionId": "203",
    "newVersionId": "204",
    "oldSha256": "15caa821e90a70d5b0f8ba1554c0d0d6db332a9b5e53b0d5e94de24d7663533e",
    "newSha256": "7b7cc4cc75a3a355f26e2ff15ae1d26b5964ad7b370061691a94ce5f6f4b9158"
  }
}
实际生成封面
实际生成封面 · 点击查看原图

4. 手动保存狐狸:生成与卡车不同的真实模型封面

PASS
检查细节
{
  "details": {
    "id": "157",
    "name": "实测模型-狐狸动画-已验证-20260905",
    "coverUri": "fsvc://unreal-tran/image/2026/09/05/3d78768edb7ce9b4a89a75c4d68de597.jpg",
    "versionId": "202",
    "projectVersion": 12,
    "coverAssetId": "2058",
    "sha256": "6ace0cf199626a3e8ecd4b360d62c0a6ec9b39309293554765dca8128a2ec5e9",
    "bytes": 13163,
    "width": 640,
    "height": 346,
    "image": "screenshots/03-fox-cover.jpg",
    "cache": "no-cache, private"
  },
  "helpersRestored": true
}
浏览器现场
浏览器现场 · 点击查看原图
实际生成封面
实际生成封面 · 点击查看原图

5. 注入封面上传503:模型位置保存成功,旧封面保留并提示

PASS
检查细节
{
  "details": {
    "httpStatus": 503,
    "contentSaveStatus": 200,
    "originalX": 0.25,
    "savedX": 0.35,
    "coverUnchanged": true
  }
}
浏览器现场
浏览器现场 · 点击查看原图

6. 实际自动保存周期保存位置变更,不再次上传封面

PASS
检查细节
{
  "details": {
    "elapsedMs": 16159,
    "coverUploads": 0,
    "savedX": 0.45,
    "coverUnchanged": true
  }
}
浏览器现场
浏览器现场 · 点击查看原图

7. 解除故障并恢复原模型位置:封面再次更新成功

PASS
检查细节
{
  "details": {
    "id": "157",
    "name": "实测模型-狐狸动画-已验证-20260905",
    "coverUri": "fsvc://unreal-tran/image/2026/09/05/c09a49efd4423dcf8ccbc46b46d1e209.jpg",
    "versionId": "202",
    "projectVersion": 15,
    "coverAssetId": "2067",
    "sha256": "6ace0cf199626a3e8ecd4b360d62c0a6ec9b39309293554765dca8128a2ec5e9",
    "bytes": 13163,
    "width": 640,
    "height": 346,
    "image": "screenshots/06-fox-restored-cover.jpg",
    "cache": "no-cache, private"
  },
  "helpersRestored": true
}
浏览器现场
浏览器现场 · 点击查看原图
实际生成封面
实际生成封面 · 点击查看原图

8. 列表显示真实封面;读取失败回退后,同条件搜索可以重试恢复

PASS
检查细节
{
  "details": {
    "failedReads": 1,
    "restoredImages": 2,
    "sort": "CREATED_DESC"
  }
}
浏览器现场
浏览器现场 · 点击查看原图

9. 离开缓存列表后取消封面请求并释放Blob URL

PASS
检查细节
{
  "details": {
    "releasedUrls": 2
  }
}

10. 首次导入GLB自动生成封面,模型文件与图片均完成受控绑定

PASS
检查细节
{
  "details": {
    "id": "158",
    "source": "01-Box.glb",
    "uploads": [
      {
        "status": 200,
        "type": "MODEL_FILE",
        "code": "MODEL_MTO82QGT_01-BOX"
      },
      {
        "status": 200,
        "type": "IMAGE",
        "code": "MODEL_COVER"
      }
    ],
    "sha256": "6e99933505dfeb91a14d16ef1ddf53df2ea022add1b866de835c08403685b7b6",
    "bytes": 11446,
    "width": 640,
    "height": 346,
    "image": "screenshots/08-import-box-cover.jpg",
    "cache": "no-cache, private"
  }
}
浏览器现场
浏览器现场 · 点击查看原图
实际生成封面
实际生成封面 · 点击查看原图

11. 清理首次导入临时模型

PASS
检查细节
{
  "details": {
    "id": "158",
    "status": "业务软删除",
    "readAfterDelete": 404
  }
}

12. 封面读取边界:未登录401、无封面404、图片Range正确

PASS
检查细节
{
  "details": {
    "anonymous": 401,
    "missing": 404,
    "range": 206,
    "rangeBytes": 32
  }
}

13. 最终两条保留模型显示独立封面,创建时间倒序保持

PASS
浏览器现场
浏览器现场 · 点击查看原图

14. 全新浏览器会话显示两张持久化封面,重开模型不自动上传图片

PASS
检查细节
{
  "details": {
    "projects": [
      {
        "id": "156",
        "status": "PUBLISHED",
        "versionId": "204"
      },
      {
        "id": "157",
        "status": "DRAFT",
        "versionId": "202"
      }
    ],
    "unexpectedUploads": 0
  }
}
浏览器现场
浏览器现场 · 点击查看原图

数据保留与清理

保留156卡车、157狐狸及新封面;卡车恢复已发布,狐狸保留原草稿状态。故障测试位置改动已恢复。158首次导入临时工程已通过业务接口软删除。历史发布版本及封面保留。

项目初始状态最终状态
156 · 实测模型-牛奶卡车-已验证-20260905PUBLISHEDPUBLISHED
157 · 实测模型-狐狸动画-已验证-20260905DRAFTDRAFT

首次导入验证使用的临时项目 158 已通过业务软删除,删除后读取返回 404;报告保留操作证据,不宣称物理文件已删除。

问题记录

当前证据未登记未解决问题。

实际命令与结果

pnpm run build

{
  "status": "PASS",
  "details": "最终web类型检查、Vite构建、10个生成包payload哈希与API桥接/凭据门禁通过;现有Three资源URL与chunk体积警告未阻断构建。"
}

mvn -B -ntp -pl ut_tran -Dtest=ContentProjectServiceTest,ContentAssetServiceTest,ContentControllerRangeTest,ContentAuthorizerTest test

{
  "status": "PASS",
  "details": "Java17,93项通过。"
}

node --test --test-reporter=spec tools/model-cover-capture.test.mjs tools/model-cover-api.test.mjs

{
  "status": "PASS",
  "details": "截图12项+封面事务8项,20/20通过;既有模型API与导入失败保护回归也通过。"
}

当前行为与限制