Загрузить изображение в Flask

Мне нужно загрузить некоторые изображения в статическую папку моего каталога проекта, но я не знаю, как сказать это моему коду. В следующем коде.py я могу загрузить изображение и сохранить его в каталоге проекта на том же уровне статической папки, но я бы хотел, чтобы это изображение могло хранить старую папку INSIDE.

@app.route('/uploader', methods = ['GET', 'POST'])
def upload_file():
   if request.method == 'POST':
      f = request.files['file']

      f.save(secure_filename(f.filename))
      return render_template('end.html')

Что мне нужно сделать?? Спасибо, парни

Ответ 1

вам нужно определить upload folder

из документации flask

import os
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

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

def upload_file():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        # if user does not select file, browser also
        # submit a empty part without filename
        if file.filename == '':
            flash('No selected file')
            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))

https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/

Таким образом, ваш код будет UPLOAD_FOLDER = '/path/to/static/images' или что-то в этом роде

Ответ 2

Прежде всего установите:

pip install Flask-Uploads

Затем в вашем основном файле (app.py) напишите код для загрузки конфигураций изображений:

from flask import Flask, render_template, request
from flask.ext.uploads import UploadSet, configure_uploads, IMAGES

app = Flask(__name__)

photos = UploadSet('photos', IMAGES)

app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
configure_uploads(app, photos)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST' and 'photo' in request.files:
        filename = photos.save(request.files['photo'])
        return filename
    return render_template('upload.html')


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

затем напишите html для загрузки изображения:

<html>
<head>
    <title>Upload</title>
</head>
<body>
<form method=POST enctype=multipart/form-data action="{{ url_for('upload') }}">
    <input type=file name=photo>
    <input type="submit">
</form>
</body>
</html>

Запустите сервер и загрузите изображение. Загрузка изображений будет сохранена в папке static/img.

Ответ 3

Попробуйте сначала сохранить изображение JPEG или JPG в статической папке enter image description here enter image description here внутри статической папки изображение хранится
enter image description here

затем в HTML файл

<img src="{{url_for('static', filename='Hermes.png')}}" align="middle" />

добавить эту строку кода

В app.py код

from flask import Flask, render_template, redirect, url_for, request


# Route for handling the login page logic
app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def home():
    return render_template('home.html')

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

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

В register.html код

<html>
    <head>
    </head>

    <body>
    <div class="bd-example" align="middle">
            <img src="{{url_for('static', filename='Hermes.png')}}" align="middle" />
            </div>
    </body>
</html>