文件上传接口
上传模块提供 PDF、图片、语音和文本四种内容录入方式,所有上传接口均会调用 AI 自动提取题目,挂载于 /api/upload。所有接口均需认证。
文件上传接口使用
multipart/form-data 格式,单文件最大 10 MB(可通过 MAX_FILE_SIZE 环境变量调整)。上传超时时间为 120 秒(因 AI 解析较慢)。
上传 PDF
POST /api/upload/pdf
🤖 AI · multipart/form-data
上传 PDF 文件,服务端使用 pdf-parse 提取文字,再调用 AI 识别并结构化题目。
请求体(multipart/form-data)
| 字段 | 类型 | 说明 |
|---|---|---|
file | File | 必填,PDF 文件,最大 10MB |
subject | string | 可选,科目名称,默认"未知科目" |
成功响应 200
{
"success": true,
"message": "PDF解析成功",
"data": {
"fileId": "uuid",
"text": "第一章 函数\n1. 下列函数中...", // 前2000字
"extractedQuestions": [
{
"title": "函数判断题",
"content": "下列哪个是函数?",
"question_type": "multiple_choice",
"options": ["A. y²=x", "B. y=x²", "C. |y|=x", "D. y=±x"],
"correct_answer": "B",
"explanation": "函数要求一个x对应唯一y...",
"difficulty": "easy",
"topic": "函数定义"
}
]
}
}
前端调用示例
const formData = new FormData();
formData.append('file', pdfFile);
formData.append('subject', '数学');
await uploadAPI.uploadPDF(pdfFile, '数学');
// 等价于:
await axios.post('/api/upload/pdf', formData, {
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 120000
});
上传图片(OCR 识别)
POST /api/upload/image
🤖 GPT-4V · multipart/form-data
上传图片(截图、拍照等),通过 GPT-4 Vision API 识别图片中的题目文字。
请求体(multipart/form-data)
| 字段 | 类型 | 说明 |
|---|---|---|
file | File | 必填,支持 .jpg / .jpeg / .png |
subject | string | 可选,科目名称 |
图片 OCR 需要 AI 模型支持 Vision(多模态)能力。若使用 DeepSeek 或不支持 Vision 的模型,该接口将返回错误。建议使用
gpt-4o 或 gpt-4-vision-preview。
上传音频(语音转文字)
POST /api/upload/audio
🤖 Whisper ASR · multipart/form-data
上传音频文件,通过 OpenAI Whisper API 转为中文文字,再提取题目。
请求体(multipart/form-data)
| 字段 | 类型 | 说明 |
|---|---|---|
file | File | 必填,支持 .mp3 / .wav / .m4a |
subject | string | 可选,科目名称 |
语音识别使用 OpenAI Whisper API(
whisper-1 模型),目前仅 OpenAI 官方 API 支持。使用第三方兼容 API 时,该功能可能不可用。
文本直接解析
POST /api/upload/text
🤖 AI · application/json
直接提交文本内容,AI 识别并提取其中的题目。无需文件上传,使用标准 JSON 请求体。
请求体
{
"text": "1.已知函数f(x)=x²-2x+3,求f(2)的值\n\n2.化简:(a+b)²-2ab",
"subject": "数学"
}
成功响应 200
{
"success": true,
"data": {
"extractedQuestions": [
{
"title": "函数值计算",
"content": "已知函数f(x)=x²-2x+3,求f(2)的值",
"question_type": "calculation",
"correct_answer": "3",
"explanation": "f(2) = 4-4+3 = 3",
"difficulty": "easy",
"topic": "函数求值"
}
]
}
}
获取上传记录
GET /api/upload/history
返回当前用户最近 50 条上传记录。
成功响应 200
{
"success": true,
"data": [
{
"id": "uuid",
"original_name": "数学试卷.pdf",
"file_type": "pdf",
"file_size": 524288,
"status": "completed", // pending / processing / completed / failed
"created_at": "2024-01-15T08:00:00.000Z"
}
]
}