app.py
#app.py from flask import Flask, flash, request, redirect, url_for, render_template import urllib.request import os from werkzeug.utils import secure_filename app = Flask(__name__) UPLOAD_FOLDER = 'static/uploads/' app.secret_key = "secret key" app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif']) def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/') def home(): return render_template('index.html') @app.route('/', methods=['POST']) def upload_image(): if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('No image selected for uploading') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) #print('upload_image filename: ' + filename) flash('Image successfully uploaded and displayed below') return render_template('index.html', filename=filename) else: flash('Allowed image types are - png, jpg, jpeg, gif') return redirect(request.url) @app.route('/display/<filename>') def display_image(filename): #print('display_image filename: ' + filename) return redirect(url_for('static', filename='uploads/' + filename), code=301) if __name__ == "__main__": app.run()templates/index.html
//templates/index.html <html> <head> <title>Python Flask Upload and display image</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> </head> <body> <p><h1 align="center">Python Flask Upload and display image</h1></p> <div class="container"> <div class="row"> <h2>Select a file to upload</h2> <p> {% with messages = get_flashed_messages() %} {% if messages %} <ul> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} </p> {% if filename %} <div> <img src="{{ url_for('display_image', filename=filename) }}"> </div> {% endif %} <form method="post" action="/" enctype="multipart/form-data"> <dl> <p> <input type="file" name="file" class="form-control" autocomplete="off" required> </p> </dl> <p> <input type="submit" value="Submit" class="btn btn-info"> </p> </form> </div> </div> </body> </html>