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

Flask中如何正确获取上传文件扩展名实现分格式文本提取

问题定位

你现有代码无法正确获取后缀的核心原因是:request.files['files']返回的是Flask封装的FileStorage对象,并非文件路径字符串,直接传入os.path.splitext()无法解析出有效后缀。要拿到上传文件的原始名称,需要读取该对象的filename属性。
另外原代码还存在逻辑冗余问题:pdf处理分支直接return后,后续的if extract_text判断永远不会执行,属于无效代码。

正确实现方案

实现时需要注意两个细节:

  • 拿到后缀后统一转小写,避免用户上传.PDF、.Docx这类大小写混合的后缀时判断失效
  • 理顺不同格式的处理流程,统一做文本格式化返回
  • 可选增加格式校验,拦截非允许格式的文件,避免程序报错

修正后的可运行代码如下:

import os
from flask import Flask, request
import docx2txt
# 引入你自己实现的pdf miner文本提取函数
# from utils import extract_text

app = Flask(__name__)
# 配置允许上传的文件后缀
ALLOWED_EXT = {"pdf", "docx"}

@app.route('/text-extraction', methods=['POST'])
def text_extractions():
    upload_file = request.files['files']
    # 从文件对象的filename属性获取原始文件名,再拆分后缀
    file_ext = os.path.splitext(upload_file.filename)[1].lower()

    # 校验文件格式是否合法,不需要可以删掉这段
    if file_ext.lstrip('.') not in ALLOWED_EXT:
        return "仅支持pdf、docx格式文件", 400

    if file_ext == ".pdf":
        raw_text = extract_text(upload_file)
    else:
        raw_text = docx2txt.process(upload_file)
    
    return raw_text.replace("\t", " ") if raw_text else ""

补充说明:如果是生产环境高安全要求场景,建议额外增加文件头校验,避免恶意用户修改后缀上传非法文件,普通业务场景下通过filename判断后缀已经足够使用。

内容的提问来源于stack exchange,提问作者Vivek Menon M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:09:16