文件上传端点解析:POST /PDF2Excels/UpLoadFile
端点是干什么的
外部系统把一份 PDF/Excel 传上来,我们接收、存到临时目录、塞进任务队列解析,最后回传结果。这是典型的"上传 → 异步处理 → 回传"。
接收文件
FastAPI 接收上传文件用 UploadFile:
python
@app.post("/PDF2Excels/UpLoadFile")
async def upload(file: UploadFile = File(...)):
# 存到本地临时目录
folder = os.path.join(app.state.temp_folder, "upload")
os.makedirs(folder, exist_ok=True)
filepath = os.path.join(folder, file.filename)
with open(filepath, "wb") as f:
f.write(await file.read())
return {"code": 0, "filepath": filepath, "folder": folder}
处理顺序
- 校验扩展名 / 大小(可选,好习惯是入口就做)。
- 落盘到临时目录,返回可用的绝对路径。
- 组任务塞进队列。
- 回传任务ID,后续轮询/回调。
落盘为什么必须
UploadFile 是流式的,不落盘你没法用 pdfplumber/openpyxl 打开。先存成真实文件,再交给引擎是标准做法。
要给任务一个 ID
异步处理不能直接返回结果,得返回一个 p_TaskId,让调用方拿着它去查结果:
python
item = {
"p_FolderPath": folder,
"p_TaskId": task_id,
"template": template,
}
返回值设计
- 成功:
{"code": 0, "task_id": "xxx", "msg": "已接收"} - 队列满:
{"code": 503, "msg": "队列已满,请稍后重试"}
成功不代表解析完,只代表"已受理"。语义清清楚楚。
一句话:上传端点 = 接文件→落盘→组任务→回传ID,同步受理、异步出结果。