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

Flask保存favicon.ico时提示目录不存在,请求技术协助

保存favicon.ico时提示「文件/目录不存在」的解决方法

问题详情

尝试保存favicon.ico文件时失败,系统提示「文件/目录不存在」,错误发生在代码的self.file.save行。

错误截图:
错误截图

相关代码:
配置部分:

app.config['UPLOAD_FOLDER'] = '/static/files/settings/'

表单类代码:

from app import app
class SettingsForm:
    def __init__(self, title, description, file):
        self.title = title
        self.description = description
        self.file = file

        self.errors = []

    def save_img(self):
        if self.file:
            if self.allowed_file():
                try:
                    os.remove('static/files/settings/favicon.ico')
                except FileNotFoundError:
                    pass
                self.file.filename = 'favicon.ico'
                 self.file.save(os.path.join(app.config['UPLOAD_FOLDER'], self.file.filename))
            else:
                self.errors.append('文件格式错误。')

    def allowed_file(self):
        return '.' in self.file.filename and self.file.filename.rsplit('.', 1)[1].lower() in EXTENSIONS

    def change_settings(self):
        self.save_img()
        if self.title == '' or self.description == '':
            self.errors.append('表单内容不完整。')
        if len(self.errors) != 0:
            return self.errors
        with connection.cursor() as cursor:
            sql = "UPDATE settings SET title = %s, description = %s;"
            cursor.execute(sql, (self.title, self.description))
            connection.commit()
            return '修改成功。'

问题原因及解决办法

1. 路径不一致导致的目录找不到

配置里的UPLOAD_FOLDER用了绝对路径/static/files/settings/,会直接指向系统根目录下的对应文件夹,而非项目目录内的文件夹;但删除文件时用的是相对路径static/files/settings/favicon.ico,两者路径逻辑混乱。

解决:统一路径规则,推荐两种方式:

# 方式1:使用基于项目根目录的相对路径
app.config['UPLOAD_FOLDER'] = 'static/files/settings/'

# 方式2:构建项目内的绝对路径,避免环境差异
import os
app.config['UPLOAD_FOLDER'] = os.path.join(app.root_path, 'static/files/settings/')

2. 目标目录未提前创建

如果static/files/settings/目录本身不存在,save方法执行时会直接报错。

解决:在保存文件前检查并自动创建目录:

def save_img(self):
    if self.file:
        if self.allowed_file():
            upload_dir = app.config['UPLOAD_FOLDER']
            # 自动创建目录,已存在则不报错
            os.makedirs(upload_dir, exist_ok=True)
            
            try:
                # 统一使用配置的路径,避免相对/绝对路径混乱
                os.remove(os.path.join(upload_dir, 'favicon.ico'))
            except FileNotFoundError:
                pass
            self.file.filename = 'favicon.ico'
            self.file.save(os.path.join(upload_dir, self.file.filename))
        else:
            self.errors.append('文件格式错误。')

3. 代码缩进错误

原代码中self.file.save行存在多余缩进,会导致语法或逻辑错误,需修正缩进:

# 修正后正确缩进的代码
self.file.save(os.path.join(app.config['UPLOAD_FOLDER'], self.file.filename))

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:15:54