如何在Flask API中不保存文件解析PDF?pdfminer使用遇阻
解决Flask中不保存文件直接提取PDF文本的问题
你遇到的问题核心在于:Flask的request.files返回的FileStorage对象,它的name属性只是表单里的字段名(不是实际文件路径),所以直接传file.name会报文件找不到的错误。
其实pdfminer的extract_text方法支持直接传入类文件对象(只要实现了read方法就行),完全不用把文件存到服务器磁盘上。直接把上传的FileStorage对象传给它即可。
修正后的完整路由代码如下:
@app.route("/parse-data", methods=["POST"]) def file_to_resume(): file = request.files['file'] if not file.filename: return "请选择文件", 400 file_ext = os.path.splitext(file.filename)[1] if file_ext not in app.config['UPLOAD_EXTENSIONS']: return "错误的文件格式", 400 try: # 直接传入FileStorage对象,无需保存到磁盘 data = extract_text(file) data_parsed = parse_file(data) return jsonify(data_parsed), 200 except Exception as e: return f"解析文件出错: {str(e)}", 500
补充说明:
- 如果你用的是旧版pdfminer,可能需要明确指定
fileobj参数,比如extract_text(fileobj=file) - 你原来的临时文件代码有个小bug:
os.remove(os.path.join(tmp_path)多了不必要的os.path.join,应该改成os.remove(tmp_path)
这样修改后,既不用创建临时文件夹,也不用处理文件的保存和删除,性能更优,代码也更简洁。
内容的提问来源于stack exchange,提问作者El Pandario
相关产品推荐
相关产品推荐

