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
相关产品推荐
相关产品推荐

