Python Flask“ send_file()”方法TypeError

Dav*_*vik 6 python flask

我正在尝试读取用户上传的图像,然后将图像显示回给他们。我想要执行此操作而不保存上载的图像文件。

我有这样的代码:

    from flask import Flask, redirect, render_template, request, url_for, send_file
    from PIL import Image, ImageDraw
    from io import BytesIO

    app = Flask(__name__)

        @app.route('/', methods=['GET', 'POST']) 
        def index():
            if request.method == 'POST':    
                 img = Image.open(request.files['file'].stream)
                 byte_io = BytesIO()
                 img.save(byte_io, 'PNG')
                 byte_io.seek(0)
                 return send_file(byte_io, mimetype='image/png')
Run Code Online (Sandbox Code Playgroud)

它产生此错误:

TypeError: send_file() got an unexpected keyword argument 'mimetype'

我尝试用mimetype其他有效参数替换,它只会给出相同的错误,但带有新参数的名称。所以我认为问题出在我的bytes_io

更新:

为了澄清,send_file()我指的是内置flask.send_file()方法:

hyu*_*yun 5

来自烧瓶文件

mimetype 猜测需要提供文件名或附件文件名。

...

  • mimetype – 文件的 mimetype(如果提供)。如果给出了文件路径,则自动检测作为回退发生,否则将引发错误。

所以,你应该像这样提供

return send_file(io.BytesIO(obj.logo.read()),
                 attachment_filename='logo.png',
                 mimetype='image/png')
Run Code Online (Sandbox Code Playgroud)

我已经更新了我的答案,
首先,下面的示例代码应该可以正常运行,

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

@app.route('/get_image')
def get_image():
    if request.args.get('type') == '1':
       filename = 'ok.gif'
    else:
       filename = 'error.gif'
    return send_file(filename)


if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

其次,如果您仍然遇到相同的错误,我认为您的环境有问题。您可以使用pip freeze.