你是软件系统设计师,擅长golang、gin技术栈开发web restful api服务。下面提供一份功能需求文档,请仔细阅读,如有疑问,可以提出询问。确认无疑问后, 你需要根据功能需求文档做系统设计包含: * 架构设计: 根据需求,制定系统架构,包括选择合适的技术栈、定义模块之间的接口、数据库设计等。 * 模块设计: 对每个功能模块进行详细设计,定义模块的输入输出、数据结构、算法等细节。 * 接口设计: 定义每个模块的接口,包括URL、请求方式、请求参数、返回结果等。 功能需求文档: ---功能需求文档开始--- # 小说章节拆分系统功能需求文档 ## 1. 项目概述 开发一个Web应用,用于将上传的txt小说文件拆分成单独的章节文件,并保存到服务器上,为后续业务提供数据支持。 ## 2. 主要功能列表 1. 文件上传 2. 章节识别与提取 3. 文件保存 4. 元数据生成 ## 3. 详细功能描述 ### 3.1 文件上传 - 通过Web页面上传小说txt文件 - 文件大小限制:20MB - 仅支持UTF-8编码的txt文件 - 上传失败时显示具体错误信息(如"文件大小超过20M限制"或"不支持的文件格式,请上传txt文件") ### 3.2 章节识别与提取 - 使用正则表达式 `".{0,10}第.*章.{0,30}"` 匹配章节标题 - 提取章节数字,将中文数字转换为阿拉伯数字(如"第十二章"转为12,"第一百零一章"转为101) - 识别最后一个章节号作为总章节数 - 验证识别到的章节数量是否等于总章节数 - 所有不符合标准章节格式的内容归入最后一章 - 如遇到错误(如章节识别失败),返回具体的错误位置 ### 3.3 文件保存 - 计算原小说文件的MD5值 - 使用MD5值作为文件夹名,在服务器上创建对应文件夹 - 如果MD5已存在,视为已处理完成,不再重复处理 - 将每个章节保存为单独的txt文件,文件名格式为"章节数.txt"(如"1.txt"、"2.txt") - 确保章节文件按章节顺序排列,考虑超过1000章的排序问题 - 保存章节内容时保留原文不变,包括章节标题 ### 3.4 元数据生成 - 在MD5文件夹下创建metadata.json文件 - metadata.json包含以下信息: - 小说名称(默认为上传的文件名,无特殊限制) - 总章节数(解析获取) ## 4. 功能之间的依赖关系 - 文件上传成功后才能进行章节识别与提取 - 章节识别与提取完成后才能进行文件保存和元数据生成 ## 5. 错误处理 - 文件上传失败:向用户显示具体错误信息 - 章节识别失败:返回错误信息和具体错误位置,让用户修改原文件 - 处理过程中的其他错误:返回错误信息,中断处理流程 ## 6. 输出结果 - 处理成功:返回生成的MD5值 - 处理失败:返回错误信息 ## 7. 性能考虑 - 不需要显示处理进度 - 系统应能够有效处理大文件(接近20MB)的情况 ## 8. 安全性 - 仅处理txt文本文件,降低安全风险 - 使用MD5值作为文件夹名,避免文件名冲突 ---功能需求文档结束---