#9 上传 TXT,校验编码后导入本人书库 #28

Merged
ila merged 2 commits from feat/9-txt-upload into main 2026-09-13 22:36:11 +08:00
Owner

#9 实现完成,待用户验收。编码、大小、隔离与幂等契约见工单评论 7798。

  • schema 无变化;POST /books/upload 与 /books/:id/chapters/upload 走 multipart,解码后交给现有 PasteBook/PasteChapter
  • 只接受 UTF-8(可选 BOM),非法字节整体拒绝、不替换;UTF-16 明确拒绝并提示
  • 文件只在内存中解码,不写临时文件;客户端文件名不参与路径也不入库
  • 学习端导入页新增「粘贴文本 / TXT 文件」来源切换与客户端预检

本地验证:Go 单元与集成测试(专用库 lexgo_test_issue9,50 项)、学习端 80 单测与 6 项 E2E、管理端 31 单测、治理 56 测试全部通过;真实 API+MySQL 26 项检查与真实浏览器上传闭环通过。

#9 实现完成,待用户验收。编码、大小、隔离与幂等契约见工单评论 7798。 - schema 无变化;POST /books/upload 与 /books/:id/chapters/upload 走 multipart,解码后交给现有 PasteBook/PasteChapter - 只接受 UTF-8(可选 BOM),非法字节整体拒绝、不替换;UTF-16 明确拒绝并提示 - 文件只在内存中解码,不写临时文件;客户端文件名不参与路径也不入库 - 学习端导入页新增「粘贴文本 / TXT 文件」来源切换与客户端预检 本地验证:Go 单元与集成测试(专用库 lexgo_test_issue9,50 项)、学习端 80 单测与 6 项 E2E、管理端 31 单测、治理 56 测试全部通过;真实 API+MySQL 26 项检查与真实浏览器上传闭环通过。
ila added 1 commit 2026-09-11 23:37:26 +08:00
- POST /api/v1/books/upload 与 /api/v1/books/:id/chapters/upload:multipart 上传,
  字段白名单、未知或重复字段拒绝、非 multipart 拒绝、单槽并发门忙时 429
- 只接受 UTF-8(可选 BOM 剥离且不进入原文),UTF-16 按 BOM 识别并给出针对性提示,
  非法字节整体拒绝、不使用替换字符;2 MiB 字节上限之后仍套用单章 100000 码点上限
- 文件只在内存中解码,不创建临时文件;客户端文件名不参与任何路径也不入库
- 解码后交给现有 PasteBook/PasteChapter,分章、任务幂等与崩溃恢复与粘贴完全一致
- 学习端导入页新增「粘贴文本 / TXT 文件」来源切换与客户端预检,session.request 支持 FormData
- gofmt 整理 #8 引入的 import 顺序与空行
- 同步 Architecture-and-Code-Map、Business-Rules-and-Glossary、
  Local-Development-and-Verification、Product-Requirements-Overview 与 Home
ila added 1 commit 2026-09-11 23:38:42 +08:00
ila merged commit fb256d4916 into main 2026-09-13 22:36:11 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/lexgo#28