Read pdf-content in next.js 13 API route-handler results in 404

falq053o  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(138)

我在youtube上学习了这个教程(https://www.youtube.com/watch?v=enfZAaTRTKU),它教你如何上传一个pdf文件到express服务器上并读出它的内容。
我不想显示PDF -我只关心文本。
我已经遵循了教程,它对我的express环境都很有效,但当我尝试使用next.js路由处理程序时,只要我调用pdfParse(),它就会向我返回404

import pdfParse from 'pdf-parse'

import { NextResponse, type NextRequest } from 'next/server';
 
export async function POST(request: NextRequest) {
    const formData = await request.formData();
    const file = formData.get('pdf');
    

    //console.log(file) -- works fine

    // causes the server to send a 404
    const pdfData = await pdfParse(file)

    // it never gets here
    return NextResponse.json({"message": "Error"})
    
}

有人知道怎么处理吗?我想避免只为此运行一个Express服务器。

oalqel3c

oalqel3c1#

将导入替换为以下内容

import pdf from 'pdf-parse/lib/pdf-parse'

并将pdfParse(file)更改为pdf(file)
存在此问题是因为已发布的库中存在测试文件

if (isDebugMode) {
let PDF_FILE = './test/data/05-versions-space.pdf';
let dataBuffer = Fs.readFileSync(PDF_FILE);
Pdf(dataBuffer).then(function(data) {
    Fs.writeFileSync(`${PDF_FILE}.txt`, data.text, {
        encoding: 'utf8',
        flag: 'w'
    });
    debugger;
}).catch(function(err) {
    debugger;
});
}

你可以阅读更多关于它here

lnlaulya

lnlaulya2#

我在做同一个项目,我所理解的是,在Next.js中,解析PDF必须在服务器组件中发生,所以我像你一样使用API来处理PDF。
1.要解决API fetch中的404错误,请导入“pdf-parse”库,如下所示:

import parse from "pdf-parse/lib/pdf-parse";

你的代码:

import pdfParse from 'pdf-parse/lib/pdf-parse'

2.第二件事,我面临的,这可能会帮助你太使用缓冲区,如果你是一个大文件的大小
3.我还尝试将文件路径传递给API,而不是文件本身
如果你对第二、三条有兴趣,我可以再解释一下。

相关问题