Flask приложение выдает страницу 500 (внутренняя ошибка сервера) (без отслеживания ошибок) при попытке загрузить изображение. Что я делаю не так? - PullRequest
0 голосов
/ 09 июля 2020

В настоящее время я пытаюсь создать приложение flask, которое будет принимать загруженное изображение, позволять пользователю применять фильтры к этому изображению, а затем позволять пользователю просматривать свою библиотеку загруженных и отфильтрованных изображений. У меня есть метод под названием upload() и шаблон upload.html, которые напечатаны в приведенных ниже фрагментах кода - я пробовал три разные версии upload() на основе руководств по загрузке изображений в flask, и каждая из них имеют тот же результат. Шаблон загрузки с формой загружается нормально, я загружаю изображение, а затем получаю внутреннюю ошибку сервера. Я go возвращаюсь к терминалу в моей среде IDE (я использую CS50 IDE), чтобы проверить, откуда произошла ошибка, и нет никакого отслеживания.

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

Вот шаблон HTML:

{% extends "layout.html" %}

{% block title %}
    Upload
{% endblock %}

{% block main %}
    <form action="/upload" method="post" enctype=multipart/form-data>
        <input type="file" name="image">
        <input type="submit" value="Upload">
    </form>
{% endblock %}

Первая версия of upload():

@app.route("/upload", methods=['GET', 'POST'])
def upload():
    if request.method == 'GET':
        return render_template("upload.html")
    if request.files:
        #The POST request came through with an image file.
        image = request.files['image']

        if image.filename == "":
            print("No filename")
            return redirect("/upload")
        if image and allowed_image(image.filename):
            filename = secure_filename(image.filename)
            image.save(os.path.join(app.config['IMAGE_UPLOADS'], filename))
            print("Image saved.")
            return redirect("/")
        else:
            print("That file extension is not allowed")
            return redirect("/upload")
    else:
        print("Not request.files")
        return render_template("upload.html")

Второй, для которого photos = UploadSet('photos', IMAGES), с использованием расширения flask_uploads:

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

И третий:

def upload():
    if request.method == 'POST':
        target = os.path.join(APP_ROOT, "images/")
        print(target)

        if not os.path.isdir(target):
            os.mkdir(target)

        for file in request.files.getlist("image"):
            print(file)
            filename = file.filename
            destination = "/".join([target, filename])
            print(destination)
            file.save(destination)

        return render_template("index.html")
    else:
        return render_template("upload.html")

Вот изображение экрана загрузки

Внутренняя ошибка сервера

1 Ответ

0 голосов
/ 09 июля 2020

Очень просто загружать файлы с помощью flask_uploads [pip install flask_uploads]. При этом вам не нужно писать шаблонный код для загрузки файлов. ПРИМЕЧАНИЕ. Возможно, вам придется установить определенную c версию werkzeug как pip install werkzeug==0.16.0, если вы столкнетесь с проблемой, такой как «невозможно импортировать имя» secure_filename »из« werkzeug »

Вот пример, который я нашел на GitHub . https://gist.github.com/greyli/addff01c19ddca78cddf386800e57045

...