Почему HTML-форма отправляет название файла вместо самого файла?

HTML-форма отправляет название файла вместо самого файла, потому что это стандартное поведение для элемента <input> с атрибутом type="file".

Этот элемент предназначен для выбора файлов на компьютере пользователя и передачи выбранного файла на сервер для дальнейшей обработки. Когда пользователь выбирает файл через диалоговое окно, путь к файлу и его название отображаются в поле <input>, но сам файл не загружается вместе с формой.

При отправке формы сервер получает только информацию о выбранном файле, включая его название, а не сам файл. Имя файла включается в запрос HTTP POST или GET вместе с другими данными формы для обработки на сервере.

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

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

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

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