Подтвердить что ты не робот

Почему загрузка файла не работает без свойства enctype?

В большинстве случаев источником ошибок при загрузке файлов является то, что мы забываем добавить свойство enctype в HTML-форму.

Обычно нам не нужно добавлять свойство enctype для регулярных запросов. Однако нам нужно добавить это в форму HTML при загрузке файлов,

enctype="multipart/form-data"

Мне просто интересно, почему загрузка файлов не работает без свойства enctype?

4b9b3361

Ответ 1

enctype "multipart/form-data" указан RFC 1867, который вы можете просмотреть здесь для получения более подробного технического обзора.

В HTML-формах данные представлены как несколько полей. При использовании multipart/form-data в качестве типа enc браузер отправляет поля формы в виде серии "частей", каждая из которых имеет заголовок типа контента для описания типа данных, хранящихся в этой части. Этот тип содержимого обычно устанавливается как "text/plain" для нормальных полей формы. Этот тип содержимого отправляется только браузером, когда используется мультитекст/форма данных данных.

Для входных элементов типа "файл" тип содержимого - "приложение/октет-поток" или что-то подобное, что указывает программному обеспечению на стороне сервера, что содержимое поля не является типичным открытым текстом, а вместо этого является содержимым файл и должны обрабатываться по-разному.

Причина, по которой вводятся элементы типа "файл", не работает, когда "multipart/form-data" не используется, связано с тем, что сервер не имеет возможности идентифицировать, что содержимое поля отличается от содержимого нормальное текстовое поле (поскольку браузер не отправляет тип контента, если не используется multipart/form-data), поэтому он обрабатывает содержимое поля как обычный текст. Когда используется правильный enctype и сервер может правильно определить, какие типы данных содержит поле, сервер знает, как обрабатывать содержимое поля как данные файла вместо текста и может обрабатывать его должным образом.