"对象不可调用"当回显发布的图像时

时间:2015-08-01 16:16:54

标签: python flask

我正在尝试使用密钥'image'侦听通过帖子发送的文件,然后将其返回给调用者。

from flask import Flask, request, make_response
app = Flask(__name__)

@app.route('/', methods = ['POST', 'GET'])
def img():
    if request.method == 'GET':
        return "yo, you forgot to post"
    else:
        img = request.files['image']
        resp = make_response(img)
        resp.status_code = 200
        return resp

if __name__ == "__main__":
    app.debug = True
    app.run(host='0.0.0.0')

此操作失败并显示以下消息:

  

TypeError:' FileStorage'对象不可调用

我对Python并不熟悉,但我认为通过上面的操作,我将byte[]直接传递给了内存?

如果没有失败,你如何实现这一目标?我想从请求中获取图像blob,操纵它(当前不是),并将其直接返回。在内存中,不保存到文件系统。

1 个答案:

答案 0 :(得分:1)

您可以使用Flask.send_image() function再次提供图像;它接受类似文件的对象以及文件名。您必须将文件数据复制到内存中的文件对象(request.files文件对象关闭得太早而不适合):

from io import BytesIO

return send_file(BytesIO(request.files['image'].read())

您可能希望在响应中添加其他标头(例如mime-type),因为send_file()功能在此处的信息少于“regural'文件对象。发送浏览器可能包含内容类型,例如:

import mimetypes

img = request.files['image']
mimetype = img.mimetype or mimetypes.guess_type(img.filename)[0]
return send_file(BytesIO(img.read()), mimetype=mimetype)

这需要您将整个图像保存在内存中。