我正在尝试使用密钥'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,操纵它(当前不是),并将其直接返回。在内存中,不保存到文件系统。
答案 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)
这需要您将整个图像保存在内存中。