28 lines
1.6 KiB
Markdown
28 lines
1.6 KiB
Markdown
# 上传流水文件名校验后端实施计划
|
||
|
||
## 目标
|
||
|
||
上传流水文件时,后端统一过滤文件名中的空白字符,并要求过滤后的文件名主干包含 18 位身份证号片段。任一文件不满足规则时整批拦截,不创建上传记录、不保存临时文件、不调用流水分析平台。
|
||
|
||
## 实施内容
|
||
|
||
- `CcdiFileUploadController.batchUpload` 只保留项目 ID、文件数量、空文件和文件大小校验,文件名业务校验统一下沉到服务层。
|
||
- `CcdiFileUploadServiceImpl.batchUploadFiles` 在保存临时文件前完成整批文件名归一化和校验。
|
||
- 文件名归一化规则为:`originalFilename == null` 时按空字符串处理,再移除半角空白与全角空格。
|
||
- 扩展名校验、身份证号片段校验、上传记录 `fileName` 和流水平台 multipart filename 均使用归一化后的文件名。
|
||
- 身份证号片段校验使用 `(?<!\d)\d{17}[0-9Xx](?!\d)` 在文件名主干中查找,不做校验位算法。
|
||
|
||
## 测试计划
|
||
|
||
- 覆盖含空格文件名归一化后写入上传记录,并用于临时文件名。
|
||
- 覆盖无身份证号片段、空白文件名在保存临时文件前拦截。
|
||
- 覆盖 Controller 不再按原始文件名提前拦截,能把文件名业务规则交给 Service。
|
||
- 执行 `mvn -pl ccdi-project -am -Dtest=CcdiFileUploadServiceImplTest,CcdiFileUploadControllerTest -Dsurefire.failIfNoSpecifiedTests=false test`。
|
||
- 执行 `mvn -pl ccdi-project -am -DskipTests compile`。
|
||
|
||
## 范围说明
|
||
|
||
- 本次不修改前端页面。
|
||
- 本次不修改流水平台返回 DTO。
|
||
- 本次不修改 `CcdiBankStatement.fromResponse` 或 `ccdi_bank_statement` 落库逻辑。
|