# 小说章节拆分系统设计文档 ## 1. 架构设计 ### 1.1 技术栈选择 - **后端**:Golang + Gin - **数据库**:本地文件系统 - **存储**:用于存储章节文件和元数据的本地文件系统 - **正则处理**:Go语言的`regexp`包 - **文件上传**:Gin的文件上传功能 ### 1.2 系统架构 - **Web服务器**:处理HTTP请求,包括文件上传、章节识别、文件保存和元数据生成。 - **章节解析模块**:使用正则表达式匹配章节标题,并进行章节编号处理。 - **文件管理模块**:保存章节文件并生成元数据文件。 - **错误处理模块**:集中处理并返回错误信息给用户。 ## 2. 模块设计 ### 2.1 文件上传模块 - **输入**:用户上传的txt文件 - **输出**:文件保存路径或错误信息 - **细节**: - 使用Gin的`c.SaveUploadedFile()`方法将文件保存到服务器的临时目录中。 - 检查文件大小和编码格式,若不符合要求,返回具体错误信息。 ### 2.2 章节识别与提取模块 - **输入**:上传的txt文件路径 - **输出**:解析后的章节数据结构或错误信息 - **细节**: - 使用正则表达式`".{0,10}第.*章.{0,30}"`匹配章节标题。 - 实现中文数字到阿拉伯数字的转换逻辑。 - 识别并验证章节号的连续性和完整性。 - 处理不符合标准格式的章节内容,将其归入最后一章。 ### 2.3 文件保存模块 - **输入**:解析后的章节数据结构 - **输出**:保存的章节文件路径或错误信息 - **细节**: - 计算小说文件的MD5值,并创建对应文件夹。 - 检查MD5文件夹是否存在,若已存在则跳过保存。 - 章节文件按顺序保存,文件名为“章节号.txt”,确保文件名排序正确。 - 保存章节时保留原文不变。 ### 2.4 元数据生成模块 - **输入**:章节数据结构 - **输出**:metadata.json文件路径或错误信息 - **细节**: - 在MD5文件夹下生成metadata.json,内容包括小说名称和总章节数。 - 使用`encoding/json`包生成JSON文件。 ### 2.5 错误处理模块 - **输入**:模块中的错误信息 - **输出**:格式化后的错误信息 - **细节**: - 统一处理所有模块中的错误,并将错误信息返回给用户。 - 错误信息中包含具体问题描述和必要的调试信息。 ## 3. 接口设计 ### 3.1 文件上传接口 - **URL**: `/upload` - **请求方式**: `POST` - **请求参数**: - `file`: 上传的txt文件 (multipart/form-data) - **返回结果**: - 成功: ```json { "status": "success", "message": "File uploaded successfully.", "md5": "" } ``` - 失败: ```json { "status": "error", "message": "具体错误信息" } ```