小编典典

Flask返回存储在数据库中的图像

python

我的图像存储在MongoDB中,我想将它们返回给客户端,代码如下:

@app.route("/images/<int:pid>.jpg")
def getImage(pid):
    # get image binary from MongoDB, which is bson.Binary type
    return image_binary

但是,似乎我不能直接在Flask中返回二进制文件?到目前为止,我的想法是:

  1. 返回base64图像二进制文件的。问题是IE <8不支持此功能。
  2. 创建一个临时文件,然后使用返回send_file

有更好的解决方案吗?


阅读 224

收藏
2021-01-20

共1个答案

小编典典

用数据创建一个响应对象,然后设置内容类型标题。attachment如果希望浏览器保存文件而不显示文件,则将内容处置标题设置为。

@app.route('/images/<int:pid>.jpg')
def get_image(pid):
    image_binary = read_image(pid)
    response = make_response(image_binary)
    response.headers.set('Content-Type', 'image/jpeg')
    response.headers.set(
        'Content-Disposition', 'attachment', filename='%s.jpg' % pid)
    return response

相关:werkzeug.Headersflask.Response

您可以将类似文件的Oject和header参数传递send_file给它,以设置完整的响应。使用io.BytesIO二进制数据:

return send_file(
    io.BytesIO(image_binary),
    mimetype='image/jpeg',
    as_attachment=True,
    attachment_filename='%s.jpg' % pid)
2021-01-20