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

我的图像存储在Mysql中,我想将它们返回给客户端

用数据创建一个响应对象,然后设置内容类型标题。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

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

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

只是想确认dav1d的第二个建议是正确的-我对此进行了测试(其中obj.logo是mongoengine ImageField),对我来说很好用:

import io

from flask import current_app as app
from flask import send_file

from myproject import Obj

@app.route('/logo.png')
def logo():
    """Serves the logo image."""

    obj = Obj.objects.get(title='Logo')

    return send_file(io.BytesIO(obj.logo.read()),
                     attachment_filename='logo.png',
                     mimetype='image/png')

以下是传文件适用于Python 3.7.3):

import io
import base64

def get_image(image_path):
    img = Image.open(image_path, mode='r')
    img_byte_arr = io.BytesIO()
    img.save(img_byte_arr, format='PNG')
    encoded_img = base64.encodebytes(img_byte_arr.getvalue()).decode('ascii')
    return encoded_img

...
# your code
...
image = get_image(img_path)
# prepare the response: data
data["key"] = {"key1": value1, "key2": value2, "image": image}
return flask.jsonify(data)

我的代码

img_record = db.session.query(ImageInfo).filter(
        ImageInfo.id == img_id).first()
response = make_response(base64.b64decode(img_record.image))
response.headers['Content-Type'] = 'image/png'
response.headers['Content-Disposition'] = 'inline;filename=' + \
                                          str(img_record.id) + '.png'
return response

这是返回下载文件

io.BytesIO(base64.b64decode(img_record.image)
return send_file(io.BytesIO(base64.b64decode(img_record.image)),
	mimetype='image/jpeg',as_attachment=True,attachment_filename='%d.jpg' % img_record.id)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值