Flask如何将上传文件传入方法?报'_io.BytesIO'无lower属性错误
错误原因
你传入mining方法的参数是Flask接收上传文件生成的FileStorage对象,而pm4py的xes_importer.apply()预期接收的是本地文件的路径字符串,方法内部会对传入的路径执行小写转换处理,拿到BytesIO类型的流对象自然会抛出没有lower属性的报错。
解决方法
你已经将上传文件保存到了本地指定目录,直接把保存后的完整文件路径传给mining方法即可,同时需要补充mining方法的返回值,否则Flask视图会抛出无有效响应的错误。
需修改的代码段:
- 修改
upload_file路由中调用mining的逻辑
if file and allowed_file(file.filename): filename = secure_filename(file.filename) save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(save_path) # 传入保存后的文件路径而非FileStorage对象 return mining(save_path)
- 给
mining方法补充返回值(示例)
def mining(xes): log = xes_importer.apply(xes) tracefilter_log_pos = attributes_filter.apply_events(log, ["complete"], parameters={attributes_filter.Parameters.ATTRIBUTE_KEY: "lifecycle:transition", attributes_filter.Parameters.POSITIVE: True}) variants = pm4py.get_variants_as_tuples(tracefilter_log_pos) Alpha(variants.keys()) Heuristic(variants.keys(), 1, 0.5) # 补充返回响应,可根据需求调整 return "文件处理完成"
内容的提问来源于stack exchange,提问作者icbidt1018
相关产品推荐
相关产品推荐

