Flask实现视频上传播放时出现werkzeug路由构建错误如何解决
Flask视频上传播放报错排查与解决方案
报错根因
你遇到的werkzeug.routing.BuildError报错,核心原因是错误使用了url_for方法:url_for的第一个参数必须是Flask注册的视图函数名称,而非本地文件系统路径,你在display_video视图中传入了本地路径/home/ubuntu/project_rehearsal/flask2/,Flask无法找到对应路由端点,因此抛出错误。
具体问题修复
1. 修复display_video视图逻辑
该视图的作用是返回上传的视频文件,无需渲染模板或跳转,需要先导入Flask的send_from_directory方法,再修改视图代码:
# 顶部导入新增send_from_directory from flask import Flask,render_template,request,redirect,flash,url_for,send_from_directory # 修改后的display_video视图 @app.route('/uploads/<filename>') def display_video(filename): return send_from_directory(app.config['VIDEO_UPLOADS'], filename)
2. 修复allowed_videos方法的语法与逻辑错误
原方法存在缩进错误、方法调用漏括号、返回值逻辑错误三个问题,修复后代码如下:
def allowed_videos(filename): if not "." in filename: return False ext = filename.rsplit(".",1)[1] # upper是方法需要加括号调用,匹配成功返回True,失败返回False return ext.upper() == app.config['ALLOWED_VIDEOS_EXTENSIONS']
3. 基础环境检查
- 确保上传目录
/home/ubuntu/project_rehearsal/flask2/uploads/存在,且Flask进程对该目录有读写权限 - 确认上传的视频为MP4格式,大小不超过16MB的限制
测试验证
修改完成后重启Flask服务,重新上传视频即可正常播放。
内容的提问来源于stack exchange,提问作者Steve Highly
相关产品推荐
相关产品推荐

