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

使用Flask保存文件至本地时出现FileNotFoundError问题求助

解决Flask视频上传时的FileNotFoundError问题

你的代码里有几个关键问题导致了这个报错,我来逐个拆解并给出修复方案:

1. 缺失os模块导入

你在代码里用到了os.path相关的方法,但没有导入os模块——虽然你当前遇到的是路径错误,但这是代码里的隐性问题,必须补上。

2. 路径拼接逻辑错误(核心问题)

你写的保存路径代码:

file.save(os.path.join(APP_ROOT,'/static/video/', secure_filename(file.filename)))

这里的'/static/video/'是绝对路径格式(以/开头),而os.path.join的规则是:如果拼接的参数里出现绝对路径,会直接丢弃前面的所有路径,只用这个绝对路径。所以最终生成的路径是/static/video/IMG_6966.MOV,而不是你预期的「项目根目录下的static/video文件夹」,系统自然找不到这个目录。

正确的写法应该用相对路径(去掉开头的/),推荐拆分目录层级以保证跨平台兼容性:

os.path.join(APP_ROOT, 'static', 'video', secure_filename(file.filename))

3. 目标目录未提前创建

就算路径拼对了,如果static/video目录原本不存在,file.save()也会抛出找不到目录的错误。所以需要提前检查并创建这个目录。


修复后的完整代码

import os
import flask
from flask import render_template, request, redirect, send_from_directory
from werkzeug.utils import secure_filename

app = flask.Flask(__name__)
app.config['DEBUG'] = True
app.config["VIDEO_UPLOADS"] = "./input/"
APP_ROOT = os.path.dirname(os.path.abspath(__file__))

# 定义目标上传目录并确保目录存在
UPLOAD_FOLDER = os.path.join(APP_ROOT, 'static', 'video')
os.makedirs(UPLOAD_FOLDER, exist_ok=True)  # exist_ok=True避免重复创建时报错

@app.route('/video_processed', methods=['POST'])
def video_processed():
    if request.method == "POST":
        file = request.files['file']
        if file:  # 增加文件存在性判断,避免空文件上传
            filename = secure_filename(file.filename)
            save_path = os.path.join(UPLOAD_FOLDER, filename)
            file.save(save_path)
            return "视频上传成功!"  # 返回友好的文本响应,而非布尔值
    return "上传失败,请检查请求参数", 400

app.run()

用你原来的curl命令测试就能正常工作了,上传后的视频会保存在项目根目录下的static/video文件夹中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:08:12