2017-12-31 63 views
-1

Ich versuche, eine Seite zu erstellen, die ein vom Benutzer gesendetes Bild aufnimmt und automatisch auf eine neue Seite umleitet, auf der das Bild gerendert wird. Viel von meinem Code ist hier ausgeliehen: How to pass uploaded image to template.html in Flask. Aber ich kann es nicht zur Arbeit bringen; Ich stoße auf eine 400: Schlechte Anfrage. Es scheint mir, dass das Bild nicht unter /static/images speichern, aber ich bin mir nicht sicher warum. HierAngezeigtes Bild auf umgeleiteter Seite über Flask und html anzeigen

ist das Anmeldeformular in index.html:

<form method="POST" action="{{ url_for('predict') }}" enctype="multipart/form-data"> 
    <label for="file-input" class="custom-file-upload"> 
     <i class="fa fa-cloud-upload"></i> Upload Image 
    </label> 
    <input name="image-input" id="file-input" type="file" align="center" onchange="this.form.submit();"> 
</form> 

Hier ist mein app.py Code:

from flask import Flask, render_template, request, url_for, send_from_directory, redirect 
from werkzeug import secure_filename 
import os 

UPLOAD_FOLDER = '/static/images/' 
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'tiff']) 

def allowed_file(filename): 
    return '.' in filename and \ 
      filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS 

app = Flask(__name__) 
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 

@app.route('/') 
def index(): 
    return render_template("index.html") 

@app.route('/predict/', methods=['POST', 'GET']) 
def predict(): 
    if request.method == 'POST': 
     file = request.files['file'] 
     if file and allowed_file(file.filename): 
      filename = secure_filename(file.filename) 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
      return redirect(url_for('uploaded_file', filename=filename)) 
    return ''' 
    <!doctype html> 
    <title>Upload new File</title> 
    <h1>Upload new File</h1> 
    <form action="" method=post enctype=multipart/form-data> 
     <p><input type=file name=file> 
     <input type=submit value=Upload> 
    </form> 
    ''' 

@app.route('/show/<filename>') 
def uploaded_file(filename): 
    return render_template('classify.html', filename=filename) 

@app.route('/uploads/<filename>') 
def send_file(filename): 
    return send_from_directory(UPLOAD_FOLDER, filename) 


if __name__ == '__main__': 
    app.run(debug=True) 

Und schließlich, ich versuche, es zu machen, in classify.html, mit dem folgenden Code:

{% if filename %} 
    <h1>some text<img src="{{ url_for('send_file', filename=filename) }}"> more text!</h1> 
    {% else %} 
    <h1>no image for whatever reason</h1> 
    {% endif %} 

Wohin gehe ich hier falsch?

Antwort

0

Sieht aus wie ich ein Argument in meiner Eingabe fehlte: name=file in index.html. Das Hinzufügen hat den Fehler behoben. Insgesamt sieht die Eingabezeile wie folgt aus:

<input id="file-input" name=file type="file" align="center" onchange="this.form.submit();">

Verwandte Themen