我在带有CloudLinux的cPanel服务器中设置了Flask应用程序。我使用了Setup Python App功能。
该应用程序位于文件夹/ home / user / app。应用网址是https://www.example.com/app
cPanel使用Phusion Passenger使应用程序与Apache一起工作。
当我创建应用程序时,创建了一个文件夹/ home / user / app / public,据说所有图像都应该去那里。
该应用程序运行良好,但公用文件夹中图像的所有URL都给出了404错误。我尝试了不同的网址,如https://www.example.com/app/image.jpg和https://www.example.com/app/public/image.jpg。总是404。
这是我第一次使用此安装Python应用程序功能。
有谁知道哪个是正确使用的URL,或者需要配置什么才能提供图像?
谢谢!
编辑:
图像网址是使用url_for创建的:
return url_for('general.send_data_file', filename=key)
生成的URL看起来正确
我添加了一个提供文件的路由:
@general_blueprint.route('/public/data_store/data/<filename>', methods=['GET'])
def send_data_file(filename):
return send_from_directory(app.config.get('DATA_FOLDER'), filename)
我得到404而不是文件。
例如,生成的文件URL是/app/public/data_store/data/test.jpg。该应用程序在/ app下运行,并且所有创建的路由都有效,在定义路径时不使用/ app。我在send_data_file中添加了一个app.logger.info调用,并且正在调用它。
app.config.get ['DATA_FOLDER']等于./public/data_store/data
来自send_from_directory的日志没有错误。
要在应用程序中的主static
文件夹之外提供静态文件,您需要在Flask配置中更改它,如下所示:
app = Flask(__name__, static_folder='/home/user/app/public')
然后,使用url_for
作为相对路径,将static
作为HTML文件中的第一个参数:
<img src="{{ url_for('static', filename='images/image.svg') }}" alt="svg image">