用Python + FastAPI搭建PDF翻译微服务:从文件上传到结果回调(完整代码)
在业务系统里集成 PDF 翻译能力最常见的需求不是翻译一句话而是上传一个 PDF异步拿到翻译后的 PDF。这篇文章用 Python FastAPI 搭建一个最小可用的 PDF 翻译微服务覆盖文件上传、任务队列、翻译调用、结果回调四个核心环节。一、系统架构整个服务分为三层API 层FastAPI 提供/upload和/status/{task_id}接口。任务层后台线程池处理翻译任务避免阻塞请求。存储层本地目录保存上传文件和翻译结果。Client → FastAPI → Task Queue → Translator → Callback/Status API为了简化演示翻译环节调用一个模拟的翻译接口。生产环境中可以替换为真实的 PDF 翻译 API 或本地模型。二、环境准备Python 3.10FastAPI Uvicornaiofiles异步文件操作requests调用翻译 APIpipinstallfastapi uvicorn aiofiles requests python-multipart三、项目结构pdf_translate_service/ ├── main.py # FastAPI 主服务 ├── worker.py # 后台翻译任务 ├── storage/ # 上传文件和结果存储 └── callbacks/ # 回调日志四、核心代码实现1. 任务模型与内存状态# main.pyimportosimportuuidimportshutilfromdatetimeimportdatetimefromtypingimportOptionalfromfastapiimportFastAPI,File,UploadFile,BackgroundTasksfrompydanticimportBaseModelimportworker appFastAPI(titlePDF Translation Microservice)UPLOAD_DIRstorage/uploadsRESULT_DIRstorage/resultsos.makedirs(UPLOAD_DIR,exist_okTrue)os.makedirs(RESULT_DIR,exist_okTrue)# 内存中的任务状态生产环境建议用 Redistasks{}classTaskStatus(BaseModel):task_id:strstatus:str# pending / processing / completed / failedoriginal:Optional[str]Noneresult:Optional[str]Nonemessage:Optional[str]Nonecreated_at:strupdated_at:str2. 文件上传接口app.post(/upload,response_modelTaskStatus)asyncdefupload_pdf(background_tasks:BackgroundTasks,file:UploadFileFile(...),callback_url:Optional[str]None):ifnotfile.filename.endswith(.pdf):return{error:Only PDF files are supported}task_idstr(uuid.uuid4())upload_pathos.path.join(UPLOAD_DIR,f{task_id}.pdf)withopen(upload_path,wb)asf:shutil.copyfileobj(file.file,f)nowdatetime.utcnow().isoformat()tasks[task_id]{task_id:task_id,status:pending,original:upload_path,result:None,message:File uploaded, waiting for processing,created_at:now,updated_at:now,}background_tasks.add_task(worker.process_translation,task_id,upload_path,callback_url)returnTaskStatus(**tasks[task_id])3. 状态查询接口app.get(/status/{task_id},response_modelTaskStatus)asyncdefget_status(task_id:str):iftask_idnotintasks:return{error:Task not found}returnTaskStatus(**tasks[task_id])4. 后台翻译任务 worker.py# worker.pyimportosimporttimeimportrequestsfromdatetimeimportdatetime RESULT_DIRstorage/resultsdefprocess_translation(task_id:str,file_path:str,callback_url:strNone):模拟异步翻译任务frommainimporttasks tasks[task_id][status]processingtasks[task_id][message]Translating PDF...tasks[task_id][updated_at]datetime.utcnow().isoformat()try:# 模拟翻译耗时time.sleep(3)# 生产环境替换为真实翻译 API# response requests.post(# https://api.pdftranslator.org/v1/translate,# files{file: open(file_path, rb)},# data{target_lang: zh}# )# response.raise_for_status()result_pathos.path.join(RESULT_DIR,f{task_id}_translated.pdf)# 这里用原文件占位真实场景保存翻译后的 PDFwithopen(file_path,rb)assrc,open(result_path,wb)asdst:dst.write(src.read())tasks[task_id][status]completedtasks[task_id][result]result_path tasks[task_id][message]Translation completedifcallback_url:send_callback(callback_url,tasks[task_id])exceptExceptionase:tasks[task_id][status]failedtasks[task_id][message]str(e)tasks[task_id][updated_at]datetime.utcnow().isoformat()defsend_callback(url:str,payload:dict):try:requests.post(url,jsonpayload,timeout10)exceptrequests.RequestExceptionase:print(fCallback failed:{e})五、运行与测试启动服务uvicorn main:app--host0.0.0.0--port8000--reload上传 PDFcurl-XPOSThttp://localhost:8000/upload\-Ffilesample.pdf\-Fcallback_urlhttp://your-callback-server.com/notify查询状态curlhttp://localhost:8000/status/{task_id}六、生产环境建议任务队列内存tasks仅适合演示生产环境用 Celery Redis 或 RQ。文件存储上传到对象存储S3/OSS避免本地磁盘容量限制。并发控制翻译 API 通常有 QPS 限制用 Semaphore 或令牌桶限流。错误重试网络抖动时自动重试记录失败任务便于人工介入。回调可靠性回调失败时持久化到数据库支持手动补偿。七、总结这套 FastAPI 微服务的核心思路是把翻译一个 PDF拆成接收文件 → 异步处理 → 查询/回调结果三个标准化步骤。接口简单、易于集成也便于后续替换不同的翻译后端。如果你正在把 PDF 翻译能力接入自己的业务系统这个骨架应该能帮你快速跑通第一个版本。标签FastAPI、Python、PDF翻译、微服务、AI翻译

相关新闻

终极MacBook电池保护指南:Charge Limiter完全使用教程

终极MacBook电池保护指南:Charge Limiter完全使用教程

终极MacBook电池保护指南:Charge Limiter完全使用教程 【免费下载链接】charge-limiter macOS app to set battery charge limit for Intel MacBooks 项目地址: https://gitcode.com/gh_mirrors/ch/charge-limiter MacBook电池保护是每个苹果用户都应该关注的…

2026/8/11 12:39:43 阅读更多 →
三步完成STL到STEP转换:让3D打印文件变身高精度CAD模型

三步完成STL到STEP转换:让3D打印文件变身高精度CAD模型

三步完成STL到STEP转换:让3D打印文件变身高精度CAD模型 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 你是否曾经遇到过这样的情况:在3D打印机上完美工作的STL文件&…

2026/8/11 12:39:43 阅读更多 →
-40℃冻不僵,80℃烤不趴:一台国产高低温电机,凭什么拿下头部车企的10万次踏板耐久极限测试?

-40℃冻不僵,80℃烤不趴:一台国产高低温电机,凭什么拿下头部车企的10万次踏板耐久极限测试?

一、一个踏板,要经历怎样的“酷刑”才能装车?汽车后围踏板,就是车尾那个供人踩着上下车、装卸行李的“台阶”。看起来不起眼,却是整车安全链路里不容有失的一环。主机厂的验证逻辑很朴素:既然用户可能在任何环境里踩上…

2026/8/11 12:39:43 阅读更多 →

最新新闻

排列问题解析:从回溯算法到工程实践

排列问题解析:从回溯算法到工程实践

1. 排列问题概述与基础概念 排列问题是计算机科学和数学中的经典课题,也是算法竞赛和面试中的高频考点。简单来说,排列问题就是研究如何将一组元素按照特定顺序进行排列组合。比如我们有数字1、2、3,它们的全排列就是[1,2,3]、[1,3,2]、[2,1,…

2026/8/11 13:34:05 阅读更多 →
number  decimal

number decimal

number & decimal 基础术语有理数:rational number 复数:rational numbers 无理数: irrational number 复数:irrational numbers补充相关词汇实数:real number 整数:integer 分数:fraction…

2026/8/11 13:34:05 阅读更多 →
Seedance 2.0 Mini

Seedance 2.0 Mini

[AI] Local Model Video Generation_localai download models automatically api run wan2-CSDN博客 10秒视频,哆啦A猫,变成橙猫

2026/8/11 13:34:05 阅读更多 →
Windows苹果驱动缺失终极指南:轻松解决iPhone连接问题

Windows苹果驱动缺失终极指南:轻松解决iPhone连接问题

Windows苹果驱动缺失终极指南:轻松解决iPhone连接问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mir…

2026/8/11 13:34:05 阅读更多 →
云服务器在测试开发中的高效应用与实践

云服务器在测试开发中的高效应用与实践

1. 测试开发云服务器的核心价值临时测试环境一直是开发团队的老大难问题。去年我们团队在推进一个电商项目时,光是协调测试环境就浪费了整整两周时间。直到我们开始使用云服务器搭建临时环境,效率才得到质的提升——现在任何开发人员都能在5分钟内拉起一…

2026/8/11 13:34:05 阅读更多 →
Java实现五行设计模式:从哲学思想到可落地的软件架构

Java实现五行设计模式:从哲学思想到可落地的软件架构

最近在整理项目文档时,发现很多同学对“五行”这类传统文化概念在代码设计中的应用感到好奇,但又不知从何入手。本文将以一个名为“卷四仁化五行”的项目为引,系统性地探讨如何将“金、木、水、火、土”的五行哲学思想,转化为一套…

2026/8/11 13:33:05 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →