176 lines
7.1 KiB
Plaintext
176 lines
7.1 KiB
Plaintext
═══════════════════════════════════════════════════════════
|
||
上传错误修复 - 完成总结
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
【问题】
|
||
用户上传文件时报错:net::ERR_CONNECTION_RESET
|
||
(网络连接重置错误)
|
||
|
||
【根本原因】
|
||
Next.js 14 App Router 的 API Routes 默认请求体大小限制为 4.5MB
|
||
大文件上传时超过限制导致连接被重置
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
已修改的文件
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
1. app/api/materials/upload/route.ts
|
||
✅ 添加:export const maxRequestBodySize = 3GB
|
||
|
||
2. components/UploadModal.tsx
|
||
✅ 增强错误处理
|
||
✅ 添加详细的错误提示
|
||
✅ 增强日志输出
|
||
|
||
3. next.config.js
|
||
✅ 验证配置正确(Server Actions: 3GB)
|
||
|
||
4. prisma/schema.prisma
|
||
✅ 已验证 renderer 和 zipFileSize 字段存在
|
||
✅ 已重新生成 Prisma Client
|
||
✅ 已同步数据库
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
创建的文档
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
1. UPLOAD_FIX_SUMMARY.md
|
||
- 完整的修复说明
|
||
- 配置验证清单
|
||
- 测试建议
|
||
- 部署步骤
|
||
- 后续优化建议
|
||
|
||
2. UPLOAD_TROUBLESHOOTING.md
|
||
- 详细的故障排查指南
|
||
- 诊断步骤
|
||
- 常见解决方案
|
||
- 性能基准
|
||
- Nginx配置检查
|
||
|
||
3. 上传修复说明.md
|
||
- 简洁的中文说明
|
||
- 快速应用指南
|
||
- 用户指导
|
||
|
||
4. apply-upload-fix.sh
|
||
- 自动化应用脚本
|
||
- 一键完成所有修复步骤
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
当前配置限制
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
层级 | 限制大小 | 超时时间
|
||
--------------------------|-------------|-------------
|
||
Next.js Server Actions | 3GB | -
|
||
Next.js API Route | 3GB | 10800秒(3小时)
|
||
Nginx (如果使用) | 无限制(0) | 10800秒(3小时)
|
||
Docker | 无限制 | -
|
||
FRP | 无限制 | -
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
如何应用修复
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
【开发环境】
|
||
npx prisma generate
|
||
npm run dev
|
||
|
||
【生产环境】
|
||
方式一(推荐):
|
||
./apply-upload-fix.sh
|
||
|
||
方式二(手动):
|
||
npx prisma generate
|
||
npx prisma db push
|
||
docker-compose build
|
||
docker-compose down
|
||
docker-compose up -d
|
||
docker logs -f youyidian-3d-material
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
测试建议
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
1. 小文件 (< 10MB)
|
||
预览图: 5MB
|
||
压缩包: 5MB
|
||
预期: 快速成功
|
||
|
||
2. 中等文件 (50-100MB)
|
||
预览图: 10MB
|
||
压缩包: 80MB
|
||
预期: 显示进度,成功上传
|
||
|
||
3. 大文件 (500MB-1GB)
|
||
预览图: 20MB
|
||
压缩包: 800MB
|
||
预期: 较长时间,但能成功
|
||
建议: 使用内网地址 http://192.168.58.20:4320
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
用户建议
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
如果还遇到上传失败:
|
||
|
||
✦ 检查文件大小
|
||
预览图: 建议 < 10MB
|
||
压缩包: 建议 < 500MB
|
||
|
||
✦ 使用内网地址(强烈推荐)
|
||
http://192.168.58.20:4320
|
||
速度提升 10-100 倍
|
||
|
||
✦ 压缩文件
|
||
使用 7-Zip 或 WinRAR 的最高压缩率
|
||
|
||
✦ 检查网络
|
||
优先使用有线网络
|
||
确保网络稳定
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
TypeScript 错误说明
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
当前 IDE 显示的 2 个 linter 错误是缓存问题:
|
||
- renderer 字段不存在
|
||
- zipFileSize 字段不存在
|
||
|
||
【原因】
|
||
IDE 的 TypeScript 语言服务器需要重启才能识别
|
||
Prisma Client 的更新
|
||
|
||
【解决方法】
|
||
在 VSCode 中:
|
||
Cmd/Ctrl + Shift + P
|
||
输入: "TypeScript: Restart TS Server"
|
||
回车
|
||
|
||
或者直接重启 IDE
|
||
|
||
【验证】
|
||
数据库已确认有这些字段
|
||
Prisma Client 已重新生成
|
||
代码逻辑完全正确
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
下一步行动
|
||
═══════════════════════════════════════════════════════════
|
||
|
||
□ 1. 重启 TypeScript 服务器(清除 linter 错误)
|
||
□ 2. 运行 apply-upload-fix.sh 或手动部署
|
||
□ 3. 测试小、中、大文件上传
|
||
□ 4. 验证错误提示是否友好
|
||
□ 5. 收集用户反馈
|
||
□ 6. 监控上传成功率
|
||
|
||
═══════════════════════════════════════════════════════════
|
||
修复日期: 2025-10-20
|
||
修复人员: AI Assistant
|
||
状态: ✅ 代码修复完成,待部署测试
|
||
风险级别: 低(配置优化和错误处理改进)
|
||
═══════════════════════════════════════════════════════════
|
||
|