我的图像存储在MongoDB中,我想将它们返回给客户端,代码如下:
@app.route("/images/<int:pid>.jpg") def getImage(pid): # get image binary from MongoDB, which is bson.Binary type return image_binary
但是,似乎我不能直接在Flask中返回二进制文件?到目前为止,我的想法是:
base64
send_file
有更好的解决方案吗?
用数据创建一个响应对象,然后设置内容类型标题。attachment如果希望浏览器保存文件而不显示文件,则将内容处置标题设置为。
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.Headers和flask.Response
您可以将类似文件的Oject和header参数传递send_file给它,以设置完整的响应。使用io.BytesIO二进制数据:
io.BytesIO
return send_file( io.BytesIO(image_binary), mimetype='image/jpeg', as_attachment=True, attachment_filename='%s.jpg' % pid)