如何在Flask中设置上传照片的存储与读取路径
修改方案
首先在Flask应用初始化部分添加相关配置和依赖导入:
import os from flask import Flask, request, redirect, url_for, session from werkzeug.utils import secure_filename import cv2 app = Flask(__name__) # 配置上传文件的存储目录,这里设为项目根目录下的uploads文件夹 app.config['UPLOAD_FOLDER'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'uploads') # 允许上传的图片后缀 app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif'} # session需要配置密钥才能使用 app.secret_key = 'your_custom_secret_key_here' # 自动创建上传目录,如果不存在的话 if not os.path.exists(app.config['UPLOAD_FOLDER']): os.makedirs(app.config['UPLOAD_FOLDER'])
然后修改上传视图函数,将文件存入指定目录,同时记录上传的文件名:
@app.route('/', methods = ['GET', 'POST']) def uploader_file(): if request.method == 'POST': f = request.files['file'] # 校验文件名合法 if f and secure_filename(f.filename).rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']: filename = secure_filename(f.filename) save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) f.save(save_path) # 将上传的文件名存入session,方便后续路由读取 session['uploaded_image'] = filename return redirect(url_for('test')) # 非法文件的处理逻辑可以自己补充 return "不支持的文件格式"
最后替换原有的硬编码绝对路径,读取上传的图片:
# 先判断是否有上传的文件 if 'uploaded_image' in session: img_path = os.path.join(app.config['UPLOAD_FOLDER'], session['uploaded_image']) img = cv2.imread(img_path) else: # 没有上传文件时的 fallback 逻辑,比如读默认图片 img = cv2.imread("C:\\Users\\20khj\\Desktop\\photo.jpg")
补充注意事项
- 若存在多用户上传场景,不要直接用原文件名存储,可在文件名前加时间戳、用户id等标识避免重名覆盖
- 路径拼接统一使用
os.path.join,可自动适配Windows、Linux等不同系统的路径分隔符规则 - Windows系统下如果手动写绝对路径,需要将反斜杠转义(写成
\\)或者使用原始字符串(r"C:\xxx\xx.jpg"),否则会出现路径识别错误
内容的提问来源于stack exchange,提问作者김혜진
相关产品推荐
相关产品推荐

