Flask - Загрузка некоторых файлов изображений вызывает 500 Internal Server Error ... но не другие? - PullRequest
0 голосов
/ 05 августа 2020

Я создаю веб-сайт, используя flask для окончательного проекта CS50x, и я хотел, чтобы мои пользователи могли добавлять изображения в свои профили. Поэтому я установил следующее приложение basi c, чтобы проверить его функциональность:

application.py

    import os
    from flask import *  
    app = Flask(__name__)  
    
    UPLOAD_FOLDER = 'uploads'
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER     
     
    @app.route('/')  
    def upload():  
        return render_template("file_upload_form.html")  
     
    @app.route('/upload', methods = ['POST'])  
    def upload():  
        if request.method == 'POST':  
            file = request.files['file']  
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], "test.jpg"))
            return redirect("/")

file_upload_form. html

<html>  
<head>  
    <title>Upload</title>  
</head>  
<body>  
    <form action = "/upload" method = "post" enctype="multipart/form-data">  
        <input type="file" name="file" />  
        <input type = "submit" value="Upload">  
    </form>  
</body>  
</html>

После тестирования я обнаружил, что для большинства загруженных мною файлов он выдает 500 Internal Ошибка сервера без отслеживания или чего-то еще. Однако работали два изображения - оба в формате JPEG и оба небольших файла (менее 100 КБ на диске). Я не могу понять, почему одни изображения работают, а другие нет. В идеале я бы хотел, чтобы мой веб-сайт постоянно обрабатывал изображения.

Есть какой-нибудь совет, где я ошибаюсь? Спасибо

============== РЕДАКТИРОВАТЬ ==================

редмицелл любезно указал, что у меня есть две функции с одинаковым именем - извините за это! Однако проблема не устранена.

import os
from flask import *  
app = Flask(__name__)  

UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER     
 
@app.route('/')  
def myindex():
    return render_template("file_upload_form.html")  
 
@app.route('/upload', methods = ['POST'])  
def upload():  
    if request.method == 'POST':  
        file = request.files['file']  
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], "test.jpg"))
        return redirect("/")
        
if __name__ == "__main__":
    app.run(debug=True)

Терминал выводит следующее:

  • Serving Flask app "application.py" (отложенная загрузка)
  • Environment : development
  • Режим отладки: включен
  • Запускается https://e08f1ea9-40e0-458c-8c38-6f7f5b5fb160-ide.cs50.xyz: 8080 / (Для выхода нажмите CTRL + C)
  • Перезапуск со статом
  • Отладчик активен!
  • PIN-код отладчика: 113-512-723 192.168.239.158 - - [06 августа 2020 21:17:11] «GET / HTTP / 1.0» 200 -

Таким образом, даже при включенном режиме отладки он не дает мне никакой обратной связи.

1 Ответ

0 голосов
/ 06 августа 2020

Наличие двух функций с одинаковым именем (например, загрузка) приведет к ошибке AssertionError. Вероятно, вы не используете производственный сервер (или у вас не включена отладка), поэтому вы можете увидеть только ошибку 500 (внутренняя ошибка сервера). Пожалуйста, переименуйте одну из ваших функций загрузки. У вас может быть это так:

import os
from flask import *  
app = Flask(__name__)  

UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER     
 
@app.route('/')  
def myindex(): #give this function a name other than 'upload' 
    return render_template("file_upload_form.html")  
 
@app.route('/upload', methods = ['POST'])  
def upload():  
    if request.method == 'POST':  
        file = request.files['file']  
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], "test.jpg"))
        return redirect("/")"
if __name__ == "__main__":
    app.run(debug=True)

Я также включил режим отладки, чтобы вы могли видеть Tracebacks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...