通过NSSM运行Flask应用无法访问用户图片问题求助
解决NSSM运行Flask服务时无法加载用户照片的问题
问题根源
当通过NSSM将Flask应用注册为Windows服务时,服务的默认工作目录并非你的项目根目录(而是系统目录如C:\Windows\System32)。代码中使用的相对路径会基于服务的工作目录查找文件,自然找不到项目static/Photos下的用户照片,因此只会显示默认的avatar.jpg。
解决方案
方案1:改用绝对路径判断文件存在性
修改代码,先获取项目根目录的绝对路径,再基于此拼接图片的完整路径进行判断:
import os from flask import Flask app = Flask(__name__) # 获取项目根目录的绝对路径 BASE_DIR = os.path.abspath(os.path.dirname(__file__)) @app.route('/') def index(): cursor = mysql.connection.cursor() cursor.execute(BLANKED OUT...) users = cursor.fetchall() updated_users = [] for user in users: image_filename = f"{user[0]}.jpg" # 拼接静态图片的绝对路径 image_abs_path = os.path.join(BASE_DIR, 'static', 'Photos', image_filename) # 判断文件是否存在,模板使用的相对路径保持不变 if not os.path.isfile(image_abs_path): image_path = 'Photos/avatar.jpg' else: image_path = f'Photos/{image_filename}' updated_users.append(user + (image_path,)) return render_template('users.html', users=updated_users)
方案2:配置NSSM服务的工作目录
无需修改代码,直接设置服务的工作目录为项目根目录:
- 打开命令提示符,执行命令:
nssm edit 你的服务名称 - 在弹出的NSSM编辑窗口中切换到Details标签页
- 在Working directory输入框中填写你的Flask项目根目录(例如
E:\Projects\Flask-AD-User-App) - 点击OK保存设置,重启服务即可
额外验证点
- 确认运行服务的账号对项目目录(包括
static/Photos子目录)拥有读取权限 - 检查用户照片文件名与数据库中
user[0]的值完全一致(注意大小写,os.path.isfile会严格匹配文件名)
内容的提问来源于stack exchange,提问作者ViRusi92
相关产品推荐
相关产品推荐

