Flask中如何正确提供与访问media媒体文件?flask-file-upload上传后访问404
问题修复方案
问题根因
你遇到的404问题主要由以下几个错误导致:
- 未导入
send_from_directory依赖,且路径拆分逻辑多余,导致实际查找的文件路径和真实路径不匹配 settings.py里定义的UPLOAD_FOLDER没有注册到Flask实例的配置中,app.config['UPLOAD_FOLDER']读取为空as_attachment=True参数会强制触发文件下载,不符合前端img标签直接渲染图片的需求
修复步骤
1. 注册配置到Flask实例
在初始化Flask app的文件(通常是app/__init__.py)中加载配置:
from flask import Flask from settings import * app = Flask(__name__) # 加载配置项 app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
2. 修正媒体路由代码
不需要手动拆分路径,send_from_directory本身支持识别包含子目录的完整相对路径:
# routes.py from app import app from flask import send_from_directory @app.get('/media/<path:path>') def send_media(path): """ :param path: 相对路径,示例:posts/15/python.jpg """ return send_from_directory( directory=app.config['UPLOAD_FOLDER'], path=path, as_attachment=False )
生产环境优化建议
线上部署时不要用Flask本身提供静态文件服务,性能极差,建议用Nginx直接代理/media路径指向你的media文件夹,示例配置:
location /media/ {
root /你的项目完整根目录路径;
expires 30d;
}
内容的提问来源于stack exchange,提问作者Jailton Silva
相关产品推荐
相关产品推荐

