Flask中从表单获取上传图片文件名及读取的问题
解决Flask后端获取上传图片文件名及读取问题
你的问题核心是文件上传的数据不在request.form里,而是存放在request.files对象中,这也是你用request.form.values()拿不到数据的原因。下面是完整的解决步骤:
1. 确保前端表单配置正确
前端表单必须设置enctype="multipart/form-data",否则后端无法解析文件上传数据。示例HTML代码:
<form method="POST" enctype="multipart/form-data"> <input type="file" name="uploaded_image" accept="image/*"> <button type="submit">上传并处理</button> </form>
注意:input标签的name属性(这里是uploaded_image)要和后端获取时的名称完全一致。
2. 后端Flask代码处理逻辑
获取文件对象与文件名
用request.files.get('uploaded_image')获取上传的文件对象,通过file.filename直接拿到文件名:
from flask import Flask, request import cv2 import numpy as np from io import BytesIO from werkzeug.utils import secure_filename app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def handle_upload(): if request.method == 'POST': # 获取上传的文件对象 file = request.files.get('uploaded_image') if not file or file.filename == '': return '未选择有效图片' # 安全获取文件名(避免路径遍历攻击) filename = secure_filename(file.filename) print(f"上传的文件名:{filename}") # 用OpenCV读取图片(无需保存到磁盘,直接从内存读取) file.seek(0) # 重置文件指针位置 file_bytes = np.asarray(bytearray(file.read()), dtype=np.uint8) img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR) # 这里可以添加你的图片处理逻辑 if img is not None: print(f"图片读取成功,尺寸:{img.shape}") return f"图片 {filename} 处理完成,尺寸:{img.shape}" else: return '图片读取失败' return ''' <form method="POST" enctype="multipart/form-data"> <input type="file" name="uploaded_image" accept="image/*"> <button type="submit">上传并处理</button> </form> ''' if __name__ == '__main__': app.run(debug=True)
关键说明
request.files是Flask专门用于处理文件上传的对象,只有普通文本字段才会存放在request.form中。- 使用
secure_filename可以过滤掉文件名中的危险字符,避免恶意路径遍历攻击,生产环境必须加上。 - 如果需要将图片保存到磁盘,可调用
file.save(f'保存目录/{filename}'),注意先确保保存目录存在。
内容的提问来源于stack exchange,提问作者AI ML
相关产品推荐
相关产品推荐

