Класс FileStorage
Класс FileStorage используется во Flask для представления файла, загруженного через форму. Объект этого класса создаётся автоматически, когда файл приходит в запросе, и доступен через словарь request.files. Класс хранит имя файла, MIME-тип, размер и поток данных, а также позволяет сохранить файл на диск или прочитать его содержимое. Параметры объекта задаются Flask при разборе запроса, поэтому вручную создавать его обычно не требуется.
Синтаксис
from werkzeug.datastructures import FileStorage
file = FileStorage(stream=None, filename=None, name=None, content_type=None, content_length=None, headers=None)
Основные параметры:
-
stream- поток с данными файла; -
filename- имя загруженного файла; -
name- имя поля формы, из которого получен файл; -
content_type- MIME-тип файла; -
content_length- размер файла в байтах; -
headers- HTTP-заголовки, связанные с файлом.
Пример
Давайте создадим простое приложение Flask, которое принимает файл из формы и выводит его имя и MIME-тип:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
res = f"{file.filename} - {file.content_type}"
return res
Шаблон с формой для загрузки файла:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Send</button>
</form>
Результат выполнения кода после выбора файла 'abcde.txt':
"abcde.txt - text/plain"
Пример
Давайте сохраним загруженный файл на диск с помощью метода save и выведем подтверждение:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file.save('uploads/' + file.filename)
return 'file saved'
Шаблон с формой:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Send</button>
</form>
Результат выполнения кода:
"file saved"
Смотрите также
-
класс
FileStorage,
который представляет загруженный файл -
метод
save,
который сохраняет файл на диск -
атрибут
filename,
который хранит имя загруженного файла -
атрибут
content_type,
который хранит MIME-тип файла