使用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
相关产品推荐
相关产品推荐

