Files
ozon-seller-kit/docs/v2.1/image-asset-lifecycle.md
T

4.1 KiB
Raw Blame History

图片资产生命周期

状态:已实施(2026-08-30)
适用范围:采集图、手动上传图、AI 套图、单张 AI 图生图,以及图片水印。

1. 核心模型

每个 product_assets 图片素材只维护两个逻辑版本:

original:无水印原图,始终保留
current:页面预览、单图下载、ZIP 导出使用的当前版本
状态 original current 七牛对象数
未加水印 同一个对象 指向 original 1
已加水印 无水印对象 指向水印对象 2

系统不保留历史水印版。修改水印时,先上传新的水印版并切换 current,再删除旧水印版。

采集图、上传图、AI 图的区别只在 original 的来源:采集源站、用户上传文件、模型输出。后续水印、下载、删除均走同一套流程。

2. 数据字段

product_assets 继续保留 stored_url 兼容既有前端接口;其语义为 current URL。新增字段:

字段 含义
original_url 无水印原图公开 URL
original_storage_key 无水印原图对象 Key
current_storage_key 当前展示对象 Key
watermark_enabled current 是否为水印版
watermark_config 当前水印配置快照

删除对象必须使用 storage_key,不应由 URL 反推;storage_key_from_url() 仅用于兼容旧数据迁移。

迁移:a41e8c7f4b20_add_asset_image_lifecycle.py。start.command 会在启动服务前执行 alembic upgrade head。

3. 对象路径

新图片统一使用:

products/{product_id}/assets/{asset_id}/original.{ext}
products/{product_id}/assets/{asset_id}/watermark-{uuid}.{ext}

路径前缀不仅便于单图精准删除,也允许删除商品时按 products/{product_id}/ 兜底清理所有对象,包括异常中断留下的孤儿文件。

4. 创建与水印流程

采集、上传、无水印 AI 图

写入 original
→ current 指向 original
→ watermark_enabled = false

添加或修改水印

读取 original
→ 合成新水印图
→ 上传新 current
→ 提交数据库切换 current
→ 删除旧 current(水印版)

因此不会叠加水印。AI 生图参考图也优先使用 original_url,避免把水印带进下一次生成。

移除水印

current 切回 original
→ 提交数据库
→ 删除旧水印对象

5. 删除流程

删除单张素材

删除 products/{product_id}/assets/{asset_id}/ 前缀
→ 删除旧格式路径中的 original/current 对象(兼容迁移前数据)
→ 删除 product_assets 记录

若对象存储删除失败,接口返回失败并保留数据库素材记录,避免出现“数据库已删、文件未删”的静默状态。

硬删除商品

查询商品所有素材
→ 清理每个素材目录和旧格式对象
→ 清理 products/{product_id}/ 前缀(孤儿兜底)
→ 删除商品,数据库级联删除素材记录

归档商品只改变商品状态,不删除图片。

6. 服务职责

模块 职责
services/image_assets.py original/current 生命周期、加/移水印、迁入正式路径、单图/整商品回收
services/storage.py 本地/七牛上传、下载、按 Key 删除、按前缀删除、URL→Key 兼容解析
services/watermark.py 纯图片字节合成;不操作数据库或对象存储
API 路由 参数校验、数据库提交、调用生命周期服务

7. 前端入口

试算页“采集图片”和“生成结果”均可打开水印设置:

  • 为已选采集图添加水印;
  • 为已选生成图添加水印;
  • 移除已选采集图或生成图水印;
  • 新的一键生图和单张 AI 生图按当前设置自动加水印。

预览、下载与 ZIP 导出始终使用 stored_url(current);AI 生成参考图使用 original_url。

8. 旧数据兼容

旧素材首次加/移水印时会迁入新的商品/素材路径,并补齐 original/current 字段。迁移前已经产生但数据库无记录的旧七牛对象无法可靠识别;后续可按运营需要增加七牛前缀扫描与人工确认清理工具。