在使用 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)