English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Загрузка файлов Flask

Обработка загрузки файлов в Flask очень проста. Это требует HTML-формы с атрибутом enctype, установленным в 'multipart/form-data', которая подается на указанный URL. URL-обработчик извлекает файл из объекта request.files[] и сохраняет его в необходимое место.

Каждый загружаемый файл сначала сохраняется в временном месте на сервере, а затем сохраняется в конечное место. Название целевого файла может быть硬кодировано или получено из属性的 filename объекта request.files [file]. Однако, рекомендуется использовать функцию secure_filename() для получения его безопасной версии.

Вы можете определить путь к папке по умолчанию для загрузки файлов и максимальный размер загружаемых файлов в настройках конфигурации объекта Flask.

ПеременныеОбъяснение
app.config['UPLOAD_FOLDER']Определите путь к папке для загрузки файлов
app.config['MAX_CONTENT_PATH']Укажите максимальный размер файла для загрузки - в байтах

Следующий код имеет правило URL: /upload, которое показывает файл upload.html из папки templates, а также правило URL => /upload-file, которое обрабатывает процесс загрузки с помощью функции uploader().

upload.html имеет кнопку выбора файла и кнопку подтверждения.

# Filename: example.py
# Copyright: 2020 By w3codebox
# Author by: ru.oldtoolbag.com
# Date: 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <title>Пример Flask</title>
 </head>
    <body>
      <form action="http://localhost:5000/upload" method="POST"> 
          enctype="multipart/form-data">
          <input type="file" name="file"/>
          <input type="submit" value="Подтвердить"/>
       </form>
    </body>
 </html>

Вы увидите следующий экран -

Нажмите, после выбора файла ПодтвердитьМетод POST формы вызывается по URL => /upload_file. Функция lower layer uploader() выполняет операцию сохранения файла.

Ниже приведен Python-код приложения Flask.

# Filename: example.py
# Copyright: 2020 By w3codebox
# Author by: ru.oldtoolbag.com
# Date: 2020-08-08
from flask import Flask, render_template, request
 from werkzeug import secure_filename
 app = Flask(__name__)
 @app.route('/upload', methods=['GET', 'POST'])
 def upload_file():
     if request.method == 'POST':
         f = request.files['file']
         print(request.files)
         f.save(secure_filename(f.filename))
         return 'file uploaded successfully'
     else:
         return render_template('upload.html')
 if __name__ == '__main__':
     app.run(debug=True)

После выполнения программы выполните上面的 код, выберите файл изображения и нажмите кнопку загрузки, получите следующие результаты -