Node.js中如何将Buffer格式的PDF解析为文本?
解决方案
问题根源
你遇到的问题核心有两点:
- Express 默认不解析
multipart/form-data类型请求,request.body里的是整个表单的原始二进制数据(包含表单分隔符等无关内容),并非单独的PDF文件Buffer。 - 前端手动设置
Content-Type: multipart/form-data,覆盖了FormData自动生成的带boundary的正确请求头,导致后端无法正确识别文件。
具体修复步骤
1. 修正前端代码
移除手动设置的 Content-Type 头,FormData会自动生成符合规范的请求头:
export const fetchPDF = (value) => { console.log("The value>>>", value); const formData = new FormData(); formData.append('pdfFile', value); console.log(Object.fromEntries(formData.entries())) return fetch(`${baseURL}/submitPDF`, { method: 'POST', // 删除手动设置的Content-Type body: formData }) .then((response) => { if (response.ok) { console.log("The response is ok"); return response; } else { console.log("the response is not ok", response); throw new Error(`Error: ${response.status} - ${response.statusText}`); } }) .catch((error) => { console.log("There is an error>>>", error.message); }) }
2. 后端配置multer解析文件
Express需要借助multer中间件处理multipart/form-data类型的文件上传:
- 先安装multer:
npm install multer
- 修改后端路由代码,用multer解析出纯净的PDF Buffer后再传入pdf-parse:
const multer = require('multer'); const pdfParse = require('pdf-parse'); // 配置multer将文件存在内存中,直接获取Buffer const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); app.post("/submitPDF", upload.single('pdfFile'), async (request, response) => { try { // 从req.file.buffer获取PDF的原始Buffer const pdfBuffer = request.file.buffer; const parseResult = await pdfParse(pdfBuffer); console.log("提取的PDF文本:", parseResult.text); response.status(201).send({ message: "File upload successful", text: parseResult.text }); } catch (err) { console.error("PDF解析失败:", err); response.status(500).send({ message: "Failed to parse PDF", error: err.message }); } });
补充说明
Node.js的Buffer是Uint8Array的子类,完全符合pdf-parse对输入参数的要求。用multer.memoryStorage()可以直接在内存中获取文件Buffer,无需写入磁盘,效率更高。
内容的提问来源于stack exchange,提问作者vroque2022
相关产品推荐
相关产品推荐

