2017-12-05 5 views
2

Ich versuche, ein Bild zu lesen, dass der Benutzer hochlädt und dann das Bild zurück zu ihnen anzeigen. Ich möchte dies tun, ohne die hochgeladene Bilddatei zu speichern.Python Flask "send_file()" -Methode TypeError

Ich habe Code wie folgt aus:

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

Es erzeugt diesen Fehler:

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

Ich habe versucht mimetype mit anderen gültigen Parameter zu ersetzen und es gibt nur die gleiche Fehler aber mit dem Namen des neuen Parameters. Also ich denke das Problem ist mit meiner bytes_io.

UPDATE:

Um zu klären, von send_file() ich in flask.send_file() Verfahren zum integrierten Bezug:

+0

Können Sie Code-Snippets für '' 'send_file()' '' hinzufügen? habe dich nicht bekommen –

Antwort

2

Von flask document

The mimetype guessing requires a filename or an attachment_filename to be provided.

...

  • mimetype – the mimetype of the file if provided. If a file path is given, auto detection happens as fallback, otherwise an error will be raised.

Also, sollten Sie, dass wie diese

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

ich meine Antwort aktualisiert haben,
Zuerst unter Codebeispiel normalerweise

from flask import Flask 
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() 

Zweitens laufen soll, wenn Sie immer noch gleichen Fehler haben, denke ich, Ihre Umgebung‘Problem. Sie können Ihre Python-Paketversion mit pip freeze überprüfen.

+0

Danke, ich habe versucht, 'attachment_filename' und auch' as_attachment' Parameter hinzuzufügen, aber der Fehler bleibt gleich. Ich habe auch versucht, 'BytesIO (file.read()) 'zu verwenden, aber das hat auch nichts verändert:/ –

+0

Übrigens, wenn ich deinen Code in meinem Mac laufe, ist alles in Ordnung ... Wenn du bereitstellst 'attachment_filename', wie wäre es,' mimetype' zu ​​entfernen? Weil es versuchen wird, den 'mimetype' standardmäßig zu erraten, und plz überprüfen Sie Ihre Flaschenversion. – hyun

+0

Ich benutze die neueste Version von Flask (0.12.0 Ich denke, es war). Ich habe versucht, 'send_file' aus meiner' import'-Anweisung herauszunehmen und irgendwie ist der Fehler immer noch derselbe, gibt keine Art von 'send_file nicht definiert' type error ... nicht sicher, was ich davon halten soll. –

Verwandte Themen