Upload 631错误修复 - 测试验证计划
修复方案 v2.0
核心改动:完全跳过NovaStorage云存储,改用Parse Attachment对象存储base64数据
修改的文件
1. project-file.service.ts
- 方法:
uploadProjectFileWithRecord()
- 改动:
- ❌ 移除NovaStorage上传逻辑
- ❌ 移除Parse File fallback逻辑
- ✅ 直接转换文件为base64
- ✅ 创建data URL格式存储
- ✅ 保存到Attachment和ProjectFile表
2. 组件文件(无需改动)
stage-requirements.component.ts - 已使用uploadProjectFileWithRecord()
stage-delivery-execution.component.ts - 已使用uploadProjectFileWithRecord()
测试步骤
前置条件
- 清除浏览器缓存和localStorage
- 刷新页面
- 打开浏览器控制台
测试用例 1:需求确认阶段 - 拖拽上传
步骤:
- 进入项目详情页 → 需求确认阶段
- 拖拽5-10张图片到上传区域
- 观察控制台日志
预期结果:
📤 开始上传文件: test1.jpg
🔄 使用Parse Attachment直接存储(跳过NovaStorage)
✅ 文件转换成功: test1.jpg(使用base64存储)
✅ 文件上传并记录创建成功: test1.jpg
检查项:
- ✅ 所有图片上传成功(100%成功率)
- ✅ 没有出现
http://api.qiniu.com请求
- ✅ 没有出现631错误
- ✅ 图片能正常显示
测试用例 2:需求确认阶段 - 粘贴上传
步骤:
- 复制一张图片(Ctrl+C)
- 在上传区域粘贴(Ctrl+V)
- 观察控制台日志
预期结果:同测试用例1
测试用例 3:需求确认阶段 - CAD文件上传
步骤:
- 点击"上传CAD文件"按钮
- 选择.dwg或.pdf文件
- 观察控制台日志
预期结果:同测试用例1
测试用例 4:交付执行阶段 - 拖拽上传
步骤:
- 进入项目详情页 → 交付执行阶段
- 拖拽5-10张图片到白模/软装/渲染/后期区域
- 观察控制台日志
预期结果:同测试用例1
测试用例 5:交付执行阶段 - 点击上传
步骤:
- 点击"上传文件"按钮
- 选择多张图片
- 观察控制台日志
预期结果:同测试用例1
测试用例 6:大文件上传
步骤:
- 准备5MB、8MB、10MB的图片各一张
- 依次上传
- 观察控制台日志和上传时间
预期结果:
- ✅ 所有文件上传成功
- ✅ 上传时间:5MB < 2秒,10MB < 5秒
测试用例 7:数据持久化
步骤:
- 上传5张图片
- 刷新页面
- 检查图片是否仍然显示
预期结果:
- ✅ 所有图片仍然显示
- ✅ 图片URL为
data:image/jpeg;base64,...格式
测试用例 8:批量上传
步骤:
- 一次性拖拽20张图片
- 观察控制台日志
- 等待所有上传完成
预期结果:
- ✅ 所有20张图片都上传成功
- ✅ 没有任何631错误
- ✅ 上传速度可接受(<30秒)
成功标准
必须满足
- ✅ 100%上传成功率:无论上传多少次,所有图片都成功
- ✅ 0次631错误:完全没有七牛云相关错误
- ✅ 0次NovaStorage调用:控制台不应出现
NovaStorage字样
- ✅ 图片正常显示:base64 data URL能被浏览器正确解析
可选优化
- ⚠️ 上传速度:10MB图片 < 5秒
- ⚠️ 数据库大小:可接受的增长(后期可迁移到CDN)
回退方案
如果base64方案出现问题,可以考虑:
- 使用Parse Server的文件上传API(需要后端支持)
- 配置NovaStorage只使用OSS(需要修改fmode-ng配置)
- 自建文件上传服务器(长期方案)
监控指标
上线后观察:
- 错误率:631错误应为0%
- 成功率:上传成功率应为100%
- 性能:平均上传时间
- 数据库大小:Attachment表的增长速度
结论
如果所有测试用例通过,证明:
- ✅ 631错误已彻底解决
- ✅ 上传机制稳定可靠
- ✅ 方案简单易维护