返回秀秀每日修改日志

秀秀 3.239 通用完善 - 电脑端与手机端附件多选发送

记录日期:中国时间 2026-08-27;不可覆盖快照 ID:4444962eb212c6a489c54444b829cfa17361cb26863c0ca9d0d55229597c41e2

记录完整性:九项详细记录完整

## 秀秀 3.239 通用完善 - 电脑端与手机端附件多选发送

- 建立时间:2026-08-27 CST。
- 详细记录标准:v1。
- 修改范围:守一替身电脑网页端、Electron远程页面及手机端远程页面的聊天附件选择和发送模块;未修改聊天历史、账号、BOT、群组、数据库、后端消息协议、X/Q军团执行逻辑或公网代理。
- 修改目的:解决电脑端发送图片或文件时每次只能选择一个的问题,同时补齐手机端普通文件选择的多选一致性,让图片、文档和压缩包可在同一条消息中组合发送。
- 原因判断:电脑端`chatImageInput`和`chatFileInput`没有HTML `multiple`属性,变更事件固定读取`files[0]`,前端状态也只有一个`pendingAttachment`;后端消息元数据原本就是附件数组,因此限制发生在客户端选择和暂存层,不是服务器上传接口限制。
- 修改逻辑:电脑端增加`pendingAttachments`队列,图片和文件选择器均开启多选;每次选择将安全文件合并、按名称/大小/最后修改时间去重,最多保留20个。发送时按顺序逐个上传并显示“上传序号/总数/百分比”,全部上传成功后写入同一条消息的`metadata.attachments`。单文件继续通过原`pendingAttachment`兼容路径工作。手机端文件选择器同步开启多选并采用相同合并、去重和20个上限。
- 采用方法:只针对现有四个前端文件进行小范围增量修改;不重写后端、不并发轰炸上传接口。单文件上限仍保持100MB;超过20个或超过大小的文件给出明确提示,失败时保留草稿和附件队列供重试,成功后统一清空。
- 数据/调用链路:点击图片/文件→操作系统多选文件→前端附件队列显示数量和文件名→点击发送→顺序调用现有`/api/files/upload`→汇总上传结果→一次调用`/api/im/messages`保存正文与完整附件数组→电脑、手机和XBOT按原链路读取。
- 兼容保护:原单文件、纯文字、引用、@目标、乐观消息、附件预览和下载逻辑保持不变;Electron客户端本质加载服务器`/web/`,无需重新下载安装即可获得本次修复。通过更新脚本查询参数强制刷新旧缓存,不重启生产服务。
- 改动文件:`/opt/xiuxiu3-open-source/web/index.html`、`web/web.js`、`app/index.html`、`app/mobile.js`。修改前备份位于`/var/lib/xiuxiu3/change-backups/20260827-multi-attachments/`。
- 验证结果:电脑与手机JavaScript均通过`node --check`;九项静态专项断言通过,覆盖电脑图片多选、文件多选、数组状态、读取完整FileList、顺序上传、20个上限、手机文件多选和单文件兼容。公网真实Chrome DOM检查输出`PRODUCTION_DOM_MULTI_OK`,确认电脑图片/文件和手机文件选择器均带`multiple`,且页面加载新缓存版本`20260827-multi-attachment-3239`。本机Web/App均HTTP 200,`xiuxiu3-web.service`及X Worker保持active。
- 同步与回滚:当前先在守一替身节点按用户现场问题完成上线;回滚时恢复`/var/lib/xiuxiu3/change-backups/20260827-multi-attachments/`内四个文件即可,不需要恢复数据库或重启服务。通用前端同步不得用整文件覆盖其它节点,须基于各节点当前源码做相同增量合并,避免覆盖并行窗口的功能修改。