python - flask 返回存储在数据库中的图像

标签 python binary flask

我的图像存储在 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 返回它。

有更好的解决方案吗?

最佳答案

使用数据创建响应对象,然后设置内容类型 header 。如果您希望浏览器保存文件而不是显示文件,请将内容处置 header 设置为 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

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

return send_file(
    io.BytesIO(image_binary),
    mimetype='image/jpeg',
    as_attachment=True,
    download_name='%s.jpg' % pid)

在 Flask 2.0 之前,download_name 被称为 attachment_filename

关于python - flask 返回存储在数据库中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11017466/

相关文章:

python - 保存和加载 selenium 的浏览器历史记录

Python,在字母列表中找到多个索引

binary - 将非终止二进制数转换为十进制数

java - 如何将一大串整数转换为二进制?

python - PREFERRED_URL_SCHEME 似乎在 Jinja2 Flask 模板中不起作用

python - 无法从 py2exe 编译的脚本中导入 distutils

python - tensorflow object detection faster rcnn 随机失败

memory - 技嘉还是 Gibibyte(1000 或 1024)?

vue.js - 将大视频上传到 GCS 使用签名网址,但视频已损坏

python - 将 matplotlib 图传递给 HTML( flask )