如何向Flask服务端上传多张图片并解决请求连接报错问题
问题修复说明
客户端请求URL格式错误(直接触发连接报错的核心原因)
你编写的url = 'http://127.0.0.1:/8070/img_d'中端口标识格式完全错误,冒号后多了斜杠,导致requests无法识别8070端口,默认请求80端口,和你服务端实际监听的8070端口不一致,因此抛出连接拒绝报错。
修复后正确写法:url = 'http://127.0.0.1:8070/img_d'服务端导入逻辑完全错误
from app import Res是无效写法:- Res是客户端脚本的变量,服务端和客户端是独立运行的两个进程,无法直接跨进程导入变量
- 如果你的Flask脚本文件名为
app.py,这行代码会造成循环导入,直接触发运行错误
直接删除这行导入代码即可,服务端接收上传文件需要用Flask自带的request.files对象。
/img_d接口逻辑错误
原接口尝试返回不存在的Res变量,正确的接收、保存图片逻辑如下:import os @app.route('/img_d', methods=['POST']) def receive_img(): # 获取所有上传的img字段文件 imgs = request.files.getlist('img') save_paths = [] for img in imgs: if img.filename: save_path = os.path.join(app.config['UPLOAD_FOLDER'], img.filename) img.save(save_path) save_paths.append(save_path) return jsonify({"status": "success", "saved_images": save_paths})客户端上传逻辑冗余可优化
原代码for v, k in enumerate(dd)中的enumerate没有实际作用,可简化为:mul_img = [] for img_name in dd['img']: mul_img.append(('img', open(img_name, 'rb')))注意上传完成后要手动关闭打开的文件句柄,避免资源泄漏。
额外注意事项
不要将客户端请求代码和服务端启动代码写在同一个文件中,服务端启动前如果执行了客户端的post请求,会因为服务端未启动完成触发连接拒绝报错,客户端代码需要单独写在另一个py文件中,等服务端启动完成后再运行。
内容的提问来源于stack exchange,提问作者Ffuentes
相关产品推荐
相关产品推荐

