You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:12:33