Files
ccdi/docs/plans/2026-03-09-csv-pdf-upload-support-design.md

104 lines
3.1 KiB
Markdown
Raw Normal View History

# 流水导入CSV和PDF文件格式支持设计
## 概述
扩展流水导入功能支持CSV和PDF格式的文件上传与前端已有的文件类型配置保持一致。
## 背景
### 当前问题
| 层级 | 当前支持格式 | 问题 |
|------|-------------|------|
| 前端提示 | PDF、CSV、Excel | - |
| 前端校验 | `.pdf`, `.csv`, `.xlsx`, `.xls` | - |
| 后端校验 | 仅 `.xlsx`, `.xls` | ❌ 与前端不一致 |
**根本原因**:后端 `CcdiFileUploadController.java` 第65行只校验Excel格式导致上传CSV或PDF文件时被拒绝。
## 设计方案
### 修改范围
| 模块 | 文件 | 修改类型 |
|------|------|---------|
| ccdi-project | CcdiFileUploadController.java | 扩展文件类型校验 |
### 具体修改
**文件路径**`ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiFileUploadController.java`
**修改位置**第65-67行
**修改前**
```java
if (!fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) {
return AjaxResult.error("文件 " + fileName + " 格式不支持仅支持Excel文件");
}
```
**修改后**
```java
String lowerFileName = fileName.toLowerCase();
if (!lowerFileName.endsWith(".xlsx") && !lowerFileName.endsWith(".xls")
&& !lowerFileName.endsWith(".csv") && !lowerFileName.endsWith(".pdf")) {
return AjaxResult.error("文件 " + fileName + " 格式不支持,仅支持 PDF、CSV、Excel 文件");
}
```
### 改进点
1. **添加格式支持**:支持 `.csv``.pdf` 文件
2. **大小写不敏感**:使用 `toLowerCase()` 处理文件名,支持 `.CSV``.Pdf` 等扩展名变体
3. **错误提示优化**:与前端提示保持一致,用户体验更统一
## 技术要点
### 文件格式与流水分析平台兼容性
- 流水分析平台API已支持CSV文件上传根据前期探索确认
- PDF格式同样被平台接受
- 后端只负责文件类型校验,实际解析由流水分析平台处理
### 后续无需修改的部分
- 前端代码已正确配置,无需修改
- 文件上传服务(`CcdiFileUploadServiceImpl`)无需修改
- 数据库表结构无需修改
## 测试要点
### 功能测试
1. 上传 `.csv` 文件 → 成功
2. 上传 `.pdf` 文件 → 成功
3. 上传 `.xlsx` 文件 → 成功(原有功能)
4. 上传 `.xls` 文件 → 成功(原有功能)
5. 上传 `.txt` 文件 → 失败,提示格式不支持
### 边界测试
1. 上传 `.CSV`(大写)→ 成功
2. 上传 `.Csv`(混合大小写)→ 成功
3. 上传其他格式文件 → 失败
## 风险评估
| 风险 | 级别 | 应对措施 |
|------|------|---------|
| 流水分析平台不支持某些CSV/PDF变体 | 低 | 平台已确认支持,后端不做内容校验 |
| 文件大小超限 | 无 | 已有50MB限制无需额外处理 |
## 实施步骤
1. 修改 `CcdiFileUploadController.java` 第65-67行代码
2. 启动后端服务
3. 通过Swagger或前端页面测试各种格式文件上传
4. 验证错误提示正确显示
## 预计影响
- **代码改动量**1个文件约3行代码
- **测试工作量**约10分钟
- **部署风险**:极低(仅扩展支持范围,不影响现有功能)