112 lines
2.9 KiB
Markdown
112 lines
2.9 KiB
Markdown
# 文件上传逻辑检查报告
|
||
|
||
## ✅ 已修复的问题
|
||
|
||
### 1. 路径不一致问题(已修复)
|
||
|
||
**问题**:
|
||
- `FileService.createFile()` 和 `generateFullFilePath()` 使用不同的时间戳
|
||
- 导致 `filePath` 和实际 OSS 路径不匹配
|
||
|
||
**修复方案**:
|
||
- 从 `infra_file` 表查询实际路径(通过 URL + 文件大小)
|
||
- 确保路径100%准确
|
||
- 兜底方案:从 URL 提取路径
|
||
|
||
**代码位置**:
|
||
```java
|
||
// 从 infra_file 表查询实际的文件路径(确保路径100%准确)
|
||
String filePath = getFilePathFromInfraFile(fileUrl, file.getSize());
|
||
if (StrUtil.isBlank(filePath)) {
|
||
// 如果查询失败,从URL中提取路径(兜底方案)
|
||
filePath = extractPathFromUrl(fileUrl);
|
||
}
|
||
```
|
||
|
||
### 2. 冗余代码清理
|
||
|
||
**已删除**:
|
||
- `generateFullFilePath()` 方法(已删除,不再需要手动生成路径)
|
||
|
||
**保留**:
|
||
- `extractPathFromUrl()` 方法(作为兜底方案,在删除文件时也会用到)
|
||
|
||
## 📊 当前逻辑流程
|
||
|
||
```
|
||
1. 校验文件分类
|
||
↓
|
||
2. 校验配额
|
||
↓
|
||
3. 获取OSS基础目录
|
||
↓
|
||
4. 读取文件内容
|
||
↓
|
||
5. 上传到OSS(FileService.createFile)
|
||
- FileService 自动生成路径并保存到 infra_file 表
|
||
- 返回 fileUrl
|
||
↓
|
||
6. 从 infra_file 表查询实际路径(✅ 确保准确)
|
||
- 通过 URL + 文件大小精确匹配
|
||
- 兜底:从 URL 提取路径
|
||
↓
|
||
7. 获取OSS根路径
|
||
↓
|
||
8. 保存文件记录到 tik_user_file 表
|
||
- file_path: 从 infra_file 表查询的准确路径
|
||
- file_url: FileService 返回的 URL
|
||
↓
|
||
9. 更新配额
|
||
```
|
||
|
||
## ✅ 逻辑可行性检查
|
||
|
||
### 1. 路径准确性 ✅
|
||
- **方案**:从 `infra_file` 表查询
|
||
- **准确性**:100%(直接使用 FileService 保存的路径)
|
||
- **性能**:一次数据库查询,可接受
|
||
|
||
### 2. 兜底方案 ✅
|
||
- **方案**:从 URL 提取路径
|
||
- **适用场景**:查询失败时使用
|
||
- **准确性**:中等(URL 可能包含域名和查询参数)
|
||
|
||
### 3. 文件删除 ✅
|
||
- **当前**:使用 `file_path` 字段
|
||
- **准确性**:高(路径来自 infra_file 表)
|
||
- **TODO**:实现物理删除 OSS 文件
|
||
|
||
## 🎯 优化建议
|
||
|
||
### 1. 关联 file_id(可选)
|
||
|
||
如果后续需要关联 `infra_file` 表,可以在查询时保存 `file_id`:
|
||
|
||
```java
|
||
FileDO infraFile = fileMapper.selectOne(...);
|
||
if (infraFile != null) {
|
||
userFile.setFileId(infraFile.getId()); // 关联 infra_file 表
|
||
filePath = infraFile.getPath();
|
||
}
|
||
```
|
||
|
||
### 2. 性能优化(可选)
|
||
|
||
如果担心查询性能,可以:
|
||
- 添加缓存(URL → path 的映射)
|
||
- 或者:直接使用 URL 提取路径(但准确性降低)
|
||
|
||
## 📝 总结
|
||
|
||
**当前逻辑**:
|
||
- ✅ 路径准确性:100%(从 infra_file 表查询)
|
||
- ✅ 代码简洁:删除了冗余的路径生成逻辑
|
||
- ✅ 兜底方案:URL 提取路径
|
||
- ✅ 可行性:完全可行
|
||
|
||
**建议**:
|
||
- 当前实现已经是最优方案
|
||
- 路径准确性有保障
|
||
- 代码逻辑清晰,无冗余
|
||
|