在使用 Flask uwsgi 提供 PIL 图像时尝试隐式序列转换
Attempted implicit sequence conversion while serving PIL image using Flask uwsgi
我正在通过 Flask 提供 PNG 或 SVG 图像。在本地它工作正常但是当我 运行 docker 中的应用程序并发送请求 (POST) 我得到以下错误:
RuntimeError: Attempted implicit sequence conversion but the response object is in direct passthrough mode.
通过 flask 提供 PIL 图像的以下代码:
def serve_image(image: Image, mime_type: FileFormat, download: bool):
suffix = mime_type.value.split('/')[-1]
temp_file = tempfile.TemporaryFile(mode='w+b', suffix=suffix)
if suffix == 'png':
image.save(temp_file, suffix)
else:
# we cant force svg extension in PIL
image.save(temp_file)
temp_file.seek(0, 0)
return send_file(temp_file, mimetype=mime_type.value, as_attachment=download,
attachment_filename='img.' + suffix)
我试过使用 BytesIO 也没有成功。设置
Response.implicit_sequence_conversion = False
Response.direct_passthrough = False
或
@app.after_request
def after_request_func(r):
r.direct_passthrough = False
r.implicit_sequence_conversion = False
return r
也没有帮助。
问题出在 openapi-core Flask 验证中,已通过创建 werkzeug 将直接传递设置为 False 的响应解决。其他 headers 如附件 cache-timeout 必须手动设置。
res = Response(temp_file, direct_passthrough=False, mimetype=mime_type.value)
我正在通过 Flask 提供 PNG 或 SVG 图像。在本地它工作正常但是当我 运行 docker 中的应用程序并发送请求 (POST) 我得到以下错误:
RuntimeError: Attempted implicit sequence conversion but the response object is in direct passthrough mode.
通过 flask 提供 PIL 图像的以下代码:
def serve_image(image: Image, mime_type: FileFormat, download: bool):
suffix = mime_type.value.split('/')[-1]
temp_file = tempfile.TemporaryFile(mode='w+b', suffix=suffix)
if suffix == 'png':
image.save(temp_file, suffix)
else:
# we cant force svg extension in PIL
image.save(temp_file)
temp_file.seek(0, 0)
return send_file(temp_file, mimetype=mime_type.value, as_attachment=download,
attachment_filename='img.' + suffix)
我试过使用 BytesIO 也没有成功。设置
Response.implicit_sequence_conversion = False
Response.direct_passthrough = False
或
@app.after_request
def after_request_func(r):
r.direct_passthrough = False
r.implicit_sequence_conversion = False
return r
也没有帮助。
问题出在 openapi-core Flask 验证中,已通过创建 werkzeug 将直接传递设置为 False 的响应解决。其他 headers 如附件 cache-timeout 必须手动设置。
res = Response(temp_file, direct_passthrough=False, mimetype=mime_type.value)