【问题标题】:Python Flask "send_file()" method TypeErrorPython Flask“send_file()”方法 TypeError
【发布时间】:2017-12-05 05:26:40
【问题描述】:

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

我有这样的代码:

    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')

它会产生这个错误:

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

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

更新:

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

【问题讨论】:

  • 你能为send_file()添加代码sn-ps吗?没找到你

标签: python flask


【解决方案1】:

来自flask document

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

...

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

所以,你应该这样提供

return send_file(io.BytesIO(obj.logo.read()),
                 attachment_filename='logo.png',
                 mimetype='image/png')

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

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()

其次,如果您仍然遇到相同的错误,我认为您的环境有问题。你可以使用pip freeze检查你的python包版本。

【讨论】:

  • 谢谢,我尝试添加attachment_filenameas_attachment 参数,但错误仍然相同。我还尝试了您使用BytesIO(file.read()) 的方式,但这也没有改变任何东西:/
  • 顺便说一句,当我在我的 mac 上运行你的代码时,一切正常...如果你提供attachment_filename,那么删除mimetype 怎么样?因为默认情况下它会尝试猜测mimetype,请检查您的烧瓶版本。
  • 我正在使用最新版本的 Flask(我认为是 0.12.0)。我尝试从我的 import 语句中取出 send_file 并且不知何故错误仍然相同,没有给出任何类型的 send_file not defined 类型错误......不知道该怎么做。
猜你喜欢
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2023-01-27
  • 2014-04-17
  • 2023-01-07
相关资源
最近更新 更多