类型错误:使用烧瓶读取 pdf 文件时预期的 str、字节或 os.PathLike 对象,而不是 FileStorage
Posted
技术标签:
【中文标题】类型错误:使用烧瓶读取 pdf 文件时预期的 str、字节或 os.PathLike 对象,而不是 FileStorage【英文标题】:TypeError: expected str, bytes or os.PathLike object, not FileStorage while reading pdf files using flask 【发布时间】:2018-09-21 05:23:47 【问题描述】:我正在尝试使用烧瓶应用程序读取 python 文件。我正在使用 pdfminer 来阅读 pdf 文本。
@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)
fp = open(request_data, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,
password=password,
caching=caching,
check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
fp.close()
device.close()
retstr.close()
return text
不幸的是它抛出了错误,
在http://0.0.0.0:5000/ 上运行(按 CTRL+C 退出) 127.0.0.1 - - [11/Apr/2018 16:07:53] “GET /hello HTTP/1.1”200 - [2018-04-11 16:07:55,720] 应用程序中的错误:/getfile [POST] 上的异常 Traceback(最近一次通话最后一次):文件 "c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\flask\app.py", 第 1982 行,在 wsgi_app 中 响应 = self.full_dispatch_request() 文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\flask\app.py”, 第 1614 行,在 full_dispatch_request 中 rv = self.handle_user_exception(e) 文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\flask\app.py”, 第 1517 行,在 handle_user_exception 中 reraise(exc_type, exc_value, tb) 文件 "c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\flask_compat.py", 第 33 行,在再加注中 提高价值文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\flask\app.py”, 第 1612 行,在 full_dispatch_request 中 rv = self.dispatch_request() 文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\flask\app.py”, 第 1598 行,在 dispatch_request 中 在 getfile 中返回 self.view_functionsrule.endpoint 文件“C:/Users/RB287JD/Documents/Programs/flask_1.py”,第 27 行 fp = open(request_data, 'rb').decode("utf-8") TypeError: expected str, bytes or os.PathLike object, not FileStorage 127.0.0.1 - - [11/Apr/2018 16:07:55] “POST /getfile HTTP/1.1”500 -
如何读取烧瓶内的输入 pdf 文件? PS。我不想在代码的任何地方提供我的文件位置。我想即时进行。
【问题讨论】:
【参考方案1】:request.files['file']
是FileStorage 类的实例(另请参阅http://flask.pocoo.org/docs/0.12/api/#flask.Request.files),因此您不能使用fp = open(request_data, 'rb')
。 FileStorage 对象包含一个stream
属性,该属性应指向一个打开的临时文件,您可能可以将其传递给PDFPage.get_pages()
所以,类似:
@app.route('/getfile', methods=['POST'])
def getfile():
file = request.files['file']
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(file.stream, pagenos, maxpages=maxpages,
password=password,
caching=caching,
check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
device.close()
retstr.close()
return text
【讨论】:
以上是关于类型错误:使用烧瓶读取 pdf 文件时预期的 str、字节或 os.PathLike 对象,而不是 FileStorage的主要内容,如果未能解决你的问题,请参考以下文章