问题1:上传返回 400 Bad Request
症状: 上传文件时 API 返回 400,但看不到具体原因
调试过程:
- 检查 Vercel 日志,发现只有 “No outgoing requests”
- 添加详细日志后,发现
Magic number validation: { valid: false }
- 原因:文件扩展名是 .mp4,但 Magic Number 不匹配(可能是手机拍的视频格式问题)
解决方案: 临时禁用 Magic Number 验证
问题2:B2 Access Key 一直报错
症状:
InvalidAccessKeyId: The key 'xxx' is not valid
Malformed Access Key Id
调试过程:
- 检查环境变量配置 - 都配了
- 检查 bucket 名称 - 正确
- 检查 region - 正确 (us-west-000)
- 重新创建 key - 用户复制的 key 太短(手动输入抄错了)
- 指导用户从 B2 控制台直接复制完整 key
解决方案: 引导用户正确复制 key(24位数字)
问题3:Vercel 连接本地代理失败
症状: connect ECONNREFUSED 127.0.0.1:7897
调试过程:
- 代码里有
process.env.NODE_ENV === "development" 判断,但 NEXT_PUBLIC_SITE_URL 包含 localhost 时也会启用
- 发现 Vercel 环境变量里没有 PROXY,但代码里有硬编码的
http://127.0.0.1:7897 作为 fallback
- 发现两处问题:
lib/auth/index.ts - 代理配置
lib/ai/analyzer.ts - axios proxy 配置
解决方案: 只在 NODE_ENV === "development" 时启用代理
问题4:音频分析 Vercel 上无法工作
症状: ENOENT: no such file or directory, mkdir '/var/task/temp_audio_analysis'
调试过程:
- Vercel Serverless Functions 不能写本地文件系统
- 原方案用本地文件提取音频 → 不可行
- 改用云端服务:AssemblyAI(免费1小时/月)
解决方案: 上传文件到 B2,然后调用 AssemblyAI API 转录
教训总结
| 教训 |
说明 |
| 本地代理不要带上线 |
代码里的 127.0.0.1:7897 要用环境变量判断 |
| 添加足够的日志 |
方便定位问题 |
| 云端环境限制 |
Vercel 不能写文件,FFmpeg 等工具不能用 |
| 用户输入要验证 |
B2 key 手动输入容易出错 |
涉及文件
lib/auth/index.ts - 代理配置
lib/ai/analyzer.ts - AI 分析 + proxy 配置
app/api/upload/route.ts - 文件上传
app/api/audio-analyze/route.ts - 音频分析
新增功能
- 上传功能 - 从本地存储改为 B2 上传
- AI 默认提供商 - 从智谱AI改为 OpenRouter
- 音频分析 - 从本地 Whisper 改为 AssemblyAI 云端转录