Files
ccdi/docs/reports/implementation/2026-07-03-bank-upload-filename-validation.md

2.0 KiB
Raw Blame History

上传流水文件名校验实施记录

基本信息

  • 实施日期2026-07-03
  • 实施范围:项目详情上传数据页对应的后端批量上传接口 /ccdi/file-upload/batch
  • 需求范围:过滤上传流水文件名中的空白字符;文件名主干缺少 18 位身份证号片段时拦截上传

修改内容

  • CcdiFileUploadController
    • 批量上传入口只保留项目 ID、文件数量、空文件和文件大小校验。
    • 文件名、扩展名和身份证号片段校验统一交给 Service避免 controller 与 service 规则不一致。
  • CcdiFileUploadServiceImpl
    • 新增上传文件名归一化:空文件名按空字符串处理,移除半角空白与全角空格。
    • 在保存临时文件和创建上传记录前,先完成整批文件名校验。
    • 归一化后的文件名用于上传记录 fileName、临时文件名后缀和流水平台 multipart filename。
    • 文件名主干必须包含 (?<!\d)\d{17}[0-9Xx](?!\d) 命中的身份证号片段。
  • CcdiFileUploadServiceImplTestCcdiFileUploadControllerTest
    • 新增文件名去空格、无身份证号拦截、空白文件名拦截和 controller 下沉校验测试。
    • 将 controller 测试从 static mock 调整为真实 SecurityContextHolder 登录用户。
    • 对齐当前“上传数据删除不调用流水分析平台删除接口”的既有实现断言。

验证情况

mvn -pl ccdi-project -am -Dtest=CcdiFileUploadServiceImplTest,CcdiFileUploadControllerTest -Dsurefire.failIfNoSpecifiedTests=false test
  • 结果BUILD SUCCESS
  • 覆盖Controller 批量上传入口、Service 文件名归一化与保存前拦截、既有上传/删除相关单元测试。
mvn -pl ccdi-project -am -DskipTests compile
  • 结果BUILD SUCCESS
  • 覆盖:ccdi-project 及依赖模块编译通过。

范围说明

  • 未修改前端页面。
  • 未修改流水平台响应 DTO。
  • 未修改 CcdiBankStatement.fromResponseccdi_bank_statement 落库逻辑。