You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Axios将Node.js端PDF文件发送到Flask服务端并正确解析

问题根因

你在Node.js侧构造formData追加文件时,没有给Buffer类型的文件内容指定文件名参数,form-data库默认会将其识别为普通文本字段而非文件字段,因此Flask不会将其归入request.files,而是放到普通表单参数request.form中。

方案1:修改Node.js侧代码(推荐)

在formData.append方法中传入第三个参数指定文件名,符合form-data文件传输的标准规范,修改后的Node.js代码如下:

const existingFile = fs.readFileSync(path)                                
console.log(existingFile)
const formData = new nodeFormData()
// 追加第三个参数指定文件名,标记为文件字段
formData.append("file", existingFile, { filename: documentData.docuName })
formData.append("fileName", documentData.docuName)
try {
     const getFile = await axios.post("http://127.0.0.1:5000/pdf-slicer", formData,
                    {
                      headers: {
                                  ...formData.getHeaders()
                               }
                       })
     console.log(getFile)} catch (e) {console.log(e, "getFileError")}

修改后Flask侧可以直接从request.files中拿到标准文件对象,示例代码如下:

if request.method == "POST":
    file = request.files.get("file")
    if file:
        # 直接保存到本地
        file.save("./target.pdf")
        # 也可以直接读取字节内容
        content = file.read()

方案2:直接处理现有request.form中的数据

如果不需要调整Node.js侧代码,可以直接将拿到的字符串格式的文件内容转换为Python可用的类文件对象,操作代码如下:

from io import BytesIO

if request.method == "POST":
    file_content_str = request.form.get("file")
    if file_content_str:
        # 用latin-1编码转换为原始字节,避免二进制内容丢失
        file_bytes = file_content_str.encode("latin-1")
        # 封装为类文件对象,可直接传入PDF处理库、或写入本地
        file_obj = BytesIO(file_bytes)
        # 示例:保存到本地
        with open("./target.pdf", "wb") as f:
            f.write(file_bytes)

注意:必须使用latin-1编码,该编码为单字节编码,所有二进制字节值都可以直接映射为对应字符,不会出现内容丢失或编码错误。

内容的提问来源于stack exchange,提问作者Mirza Umair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:27:00