如何在Flask响应中返回图像?

152

以一个例子来说,这个URL:

http://example.com/get_image?type=1

应该返回一个image/gif的MIME类型响应。我有两个静态的.gif图片,
如果类型是1,就返回ok.gif,否则返回error.gif。在Flask中如何实现?

1个回答

249
你可以使用类似下面的方式:
from flask import send_file

@app.route('/get_image')
def get_image():
    if request.args.get('type') == '1':
       filename = 'ok.gif'
    else:
       filename = 'error.gif'
    return send_file(filename, mimetype='image/gif')

根据type查询参数的值,返回ok.giferror.gif。有关更多信息,请参阅send_file函数request对象的文档。


2
有没有任何想法如何使用 Flask-RESTful 实现这个? - David V.
1
@DavidV。我正在尝试同样的事情。我现在将使用替代方法。将响应保存为png文件,然后以某种方式创建URL。然后将该URL嵌入我的HTML页面中。 - Arindam Roychowdhury
我该如何在这里发送多个 GIF 作为返回值? - Dhanapal
12
值得注意的是,send_file方法是不安全的文件发送方式,它不执行任何健全性检查。如果你的代码中有健全性检查处理,请不要使用该方法。更多信息可以在这个答案中找到。 - Vaulstein
图片的路径应该怎么写?我需要从根目录指定路径吗:filename = './flaskapp/assets/imgs/ok.gif' - Alexey Nikonov
@AlexNikonov,只需要传递调用返回文件实际路径的终端节点,如@app.route('/vid/<filename>'),它返回send_file('path_of_video')。然后,传递<video src='/vid/output.mp4'>即可。 - jsdbt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接