Flask:如何获取动态生成的图像文件的url?

2024-05-21 11:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

from flask import Flask, redirect, url_for

app = Flask(__name__)
@app.route('/')
def index():
        generate_img("test.jpg");
        return '<img src=' + url_for(filename='test.jpg') + '>'

generate_img()将向当前目录(与此脚本相同的文件夹)输出随机图像。

我得到404,我导航到mydomain.com/test.jpg,但它不在那里。


Tags: namefromtestimportappurlflaskimg
2条回答

假设实际生成了图像(即调用了index()),404的原因是没有指向图像的路由,所以Flask将告诉您没有mydomain.com/test.jpg。默认情况下,像Apache或Nginx这样的静态web服务器会将路径从根映射到url,但是普通的Flask/Werkzeug/WSGI安装程序不会这样做。

也许您想创建一个直接返回图像的资源?

编辑:类似的东西应该能够提供图像。

@app.route("/imgs/<path:path>")
def images(path):
    generate_img(path)
    fullpath = "./imgs/" + path
    resp = flask.make_response(open(fullpath).read())
    resp.content_type = "image/jpeg"
    return resp

EDIT2:当然,generate_img可能会被重写,因此它不会写入磁盘,而是直接返回图像数据。

404错误的原因是没有这样的视图来处理这个问题。若要提供烧瓶中的图像,请将图像保存在静态文件夹中,然后可以通过此url访问图像

mydomain.com/static/test.jpg

     from flask import Flask, redirect, url_for

     app = Flask(__name__)
     @app.route('/')
     def index():
          generate_img("test.jpg"); #save inside static folder
          return '<img src=' + url_for('static',filename='test.jpg') + '>' 

静态文件夹是为所有媒体服务的,无论是css、javascript、视频或图像文件,都可以在mydomai.com/Static/filename上访问。记住,在生产过程中,不要使用静态文件夹中的烧瓶。此功能仅用于开发。

相关问题 更多 >