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

KJW*_*KJW 5 python flask

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') + '>'
Run Code Online (Sandbox Code Playgroud)

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

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

Bit*_*nce 6

假设实际生成了图像(也就是调用了index()),404的原因是没有指向图像的路径,所以Flask会告诉你没有mydomain.com/test.jpg .像Apache或Nginx这样的静态网络服务器默认会映射从根到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
Run Code Online (Sandbox Code Playgroud)

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


cod*_*ool 5

404错误的原因是没有这样的视图来处理这个问题.要从flask中提供图像,请将图像保存在静态文件夹中,然后您可以在此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') + '>' 
Run Code Online (Sandbox Code Playgroud)

静态文件夹用于提供所有媒体,无论是css,javascript,视频还是图像文件,都可以通过mydomai.com/static/filename访问.请记住,您不应该在生产中使用静态文件夹中的flask服务.此功能仅适用于开发.