Skip to content

[Bug] 图床上传:批量中途失败不回滚(已传图成孤儿、正文一张不插),错误被吞成笼统提示 #113

@Tespera

Description

@Tespera

来源:对 PR #111(图床功能,S.EE,commit 4a424ce)的代码 review,非用户上报。

开启图床后,编辑器插入图片的逻辑有几处健壮性问题。

1. 批量上传中途失败 → 已传图成孤儿、正文一张都不插入

frontend/src/views/articles/editor/composables/useEditorHelper.tsuploadImageFiles 在启用图床时是「先循环把所有图片传到 S.EE,全部传完再统一插入正文」。
若其中某张上传抛错:

  • 之前已成功上传的图片已经存在于 S.EE(无任何引用,成了孤儿);
  • catch 只弹一句笼统提示,整批一张都不会插入正文,已成功的也丢失。

2. 可能在正文插入空 ![]()

后端 backend/internal/service/image_hosting_service.goUpload 成功判定为:

if !result.Success && result.Code != 0 && result.Code != 200 { ... }
return &result.Data

判定偏脆,某些异常响应下会放行一个零值 Data,导致 result.url 为空、正文里被插入空图片链接。

3. 后端真实错误被吞

uploadImageFiles 的 catch 用固定文案 上传图片失败 覆盖了后端的具体错误(如「API 密钥未配置」、key 过期等),用户无法判断失败原因。

触发条件 / 影响范围

目前编辑器图片仅能从文件对话框单张选入(无粘贴 / 拖拽入口),批量路径暂时走不到,现状影响有限。但属于明确的健壮性隐患——一旦后续补上粘贴 / 多选,问题会被放大。

建议

  • 逐张「上传成功即插入」,单张失败只提示该张、不影响已成功的;或失败时回滚已上传项。
  • 收紧成功判定,并在插入前校验 URL 非空。
  • 把后端 error message 透传给 toast,替代笼统文案。

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2低优先级 / 可以稍后处理bugSomething isn't workingtriage待分诊

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions