Files
cmshoppe/docs/tasks/T-593.md
T

3.2 KiB
Raw Blame History

id, title, phase, deps, status, created
id title phase deps status created
T-593 AI工场部分导出、JPEG 转码与已存在商品目录安全处理 7
T-592
DONE 2026-07-11

问题 / 背景

用户可在主图/详情图未满目标数量时导出当前终选。导出要让用户选择父目录,再创建商品 ID 子目录;目标已存在不能简单合并,否则旧序号图片会残留,也不能递归清空可能包含用户文件的目录。

方案

  • 点击导出用目录选择框选父目录,在其下创建 <商品ID>/。
  • 按连续终选顺序实际转码并写:商品ID_主图_1.jpg、商品ID_详情图_1.jpg;质量沿用应用图片质量设置,透明图按已验证规则铺白底。
  • 主/详情总数为 0 禁止;其他未满组合均允许,确认框显示 X/目标数。
  • 导出前预检全部源文件和解码,使用 staging 写完整后再发布,失败不留下半套结果。
  • 目标目录存在时只提供:
    • 覆盖本软件导出的图片:仅匹配当前商品命名规则的旧主图/详情图文件,保留其他文件;默认仍需确认。
    • 新建带时间目录:商品ID_YYYYMMDD_HHMMSS/。
    • 取消(默认)。
  • 不提供合并;成功后提示实际路径和数量,并提供打开目录。

验收要点

  • 只主图、只详情、两类部分、满额和零图片场景均正确。
  • PNG/WebP 真正输出可解码 JPEG,不是改后缀;序号与终选顺序一致。
  • 已存在目录三选正确;覆盖只删除受管命名文件,用户其他文件保持字节不变。
  • 某源图缺失/损坏时导出前失败,原目标不被部分改写。
  • 路径穿越、非法商品 ID、只读目录、同秒时间目录冲突和文件锁有中文错误。

边界(不改什么)

  • 不递归清空用户选择目录,不提供合并。
  • 不要求达到 9/12,不上传或修改蝦皮。
  • 不导出原始任务密钥、提示词、日志或 SQLite 数据。

执行记录

  • 2026-07-11:完成 AI工场终选本地导出。
    • 新增 app/image_studio_export.py:读取 AI工场主图/详情图终选顺序,预检源文件和图片解码,按 商品ID_主图_1.jpg / 商品ID_详情图_1.jpg 连续命名转码为真正 JPEG,透明图铺白底。
    • 目录安全:默认目标为用户选择父目录下的 <商品ID>/;目录已存在时支持“覆盖本软件导出的图片”(仅删除当前商品受管命名文件,保留用户其它文件)或“新建带时间目录”;不提供合并、不递归清空目录。
    • GUI:⑥ AI工场底部新增「导出终选」按钮,允许部分导出,0 张阻断;导出通过 ImageStudioExportWorker 后台执行,成功后中文提示主图/详情图数量、目录,并可打开目录。
    • 更新 docs/routes.md 和 docs/04-architecture.md,明确导出服务职责和不自动上传蝦皮边界。
    • 验证:主工作区 targeted 测试通过;因无关默认提示词脏文件仍会影响全量 unittest,已在干净 worktree 仅套用 T-593 diff 后运行 python -m ruff check app tests main.py、py -3.10 -m compileall app main.py、py -3.10 -m unittest discover -s tests(367 tests)和 git diff --check,全部通过。