В настоящее время я пытаюсь создать приложение 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")
Вот изображение экрана загрузки
Внутренняя ошибка сервера