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

Flask读取PDF时出现TypeError:期望str、bytes或os.PathLike对象而非FileStorage

解决Flask中使用PDFMiner读取上传PDF时的TypeError问题

嘿,这个问题我熟!你遇到的TypeError: expected str, bytes or os.PathLike object, not FileStorage错误,根源是对Flask上传文件的对象类型理解错了。

错误原因

request.files['file']返回的是Flask的FileStorage对象,它不是文件路径,也不是直接能给open()函数用的参数。你试图用open(request_data, 'rb')去打开这个对象,自然会报错——open()只认文件路径、字节或者路径类对象,不认FileStorage。

解决方案

其实FileStorage本身已经封装了上传文件的数据流,你直接用它的stream属性就能拿到类文件对象,传给PDFMiner就行,完全不需要额外调用open()。

修改后的完整代码如下:

from flask import Flask, request
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

app = Flask(__name__)

@app.route('/getfile', methods=['POST'])
def getfile():
    request_data = request.files['file']
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    
    # 直接使用FileStorage的stream属性,无需open
    fp = request_data.stream
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos = set()
    
    # 遍历并处理PDF的每一页
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching):
        interpreter.process_page(page)
    
    # 获取提取到的文本内容
    extracted_text = retstr.getvalue()
    
    # 记得关闭资源,避免内存泄漏
    device.close()
    retstr.close()
    fp.close()
    
    return extracted_text

if __name__ == '__main__':
    app.run(debug=True)

额外提示

  1. 确保你已经安装了维护中的pdfminer分支:pip install pdfminer.six(原pdfminer已停止更新)
  2. 如果上传的文件可能很大,建议限制文件大小或采用流式处理,避免内存占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:38:53