Качването на файлове чрез уеб формуляр е важна част от повечето съвременни приложения и уебсайтове. В този учебник ще научите как да реализирате ефективно елемента Input type="file" за качване на файлове. Ще разберете как работи процесът на избор на файл, как да се гарантира, че файла се изпраща правилно на сървъра и какви настройки са важни. Това ръководство е за разработчици, които искат да разширят познанията си за работа с HTML форми и качване на файлове.

Основни изводи

  • Елементът за въвеждане type="file" позволява на потребителите да качват файлове.
  • Използването на правилните типове форми и атрибути за Enctype е от съществено значение за успешното качване на файлове.
  • Можете да създадете потребителски приятен интерфейс за качване на файлове с помощта на JavaScript.

По-стъпково ръководство

Най-напред трябва да се уверите, че съществува основната HTML форма с елемента за въвеждане type="file".

Ефективна имплементация на качване на файлове в уеб формуляри

Тук в този локален пример вече съм настроил елемента за въвеждане с тип "File". Виждате, че до бутона има надпис "no file chosen". Елементът за въвеждане type="file" позволява на потребителите да изберат един или повече файлове, които после да бъдат отворени чрез диалогов прозорец на операционната система.

Ефективна имплементация на качването на файлове в уеб формуляри

Изгледът на диалоговия прозорец се различава в зависимост от операционната система, било то Windows, Linux или MacOS. Тук е моят пример на MacOS система, където можете да изберете един или повече файлове. След като щракнете върху "Отвори", избраният файл се показва в полето за въвеждане.

Ефективна имплементация на качване на файлове в уеб формуляри

Вече сте избрали файла и той се показва като стойност вътре в елемента за въвеждане. За обработка на формуляра използвам метода GET.

Ефективна имплементация на качването на файлове в уеб формуляри

След това можете да изпратите формуляра, но ще забележите, че в URL адреса се показва само името на файла. Това обаче трябва да промените, за да прехвърлите цялото съдържание на файла към сървъра.

Ефективна имплементация на качването на файлове в уеб формуляри

За целта трябва да промените метода на POST. За да проверите какво се изпраща, преминете към раздела Мрежа (Network Tab).

Ефективна имплементация на качване на файлове в уеб формуляри

Преди това обаче трябва да се уверите, че сте избрали поне един файл. Ако изберете файла "image.jpg" и изпратите формуляра, може да го намерите в Payload. Но бързо ще разберете, че тук се изпраща само името.

Ефективна имплементация на качване на файлове в уеб формуляри

Проблемът е, че атрибутът Enctype не е зададен. Трябва да го настроите на multipart/form-data, за да предавате файла в правилния формат на данни.

Ефективна имплементация на качването на файлове в уеб формуляри

С този Enctype можете да се уверите, че сървърът получава файла в неговите бинарни данни. Когато го приложите, избираме отново нашия изображение файл и изпращаме формуляра отново.

Ефективна имплементация на качване на файлове в уеб формуляри

Сега виждате, че предаването включва не само името на файла, но и бинарните данни, които трябва да се обработват от сървъра.

Сървърът след това трябва да декодира тези бинарни данни. Важно е сървърът да интерпретира тези информации правилно, за да запише файла в база данни или на сървъра.

Ефективна имплементация на качване на файлове в уеб формуляри

За да разширите формуляра си, можете да добавите допълнителни полета за въвеждане. Например класическо текстово поле, за да изпратите името на изображението заедно с изображението.

Ефективна имплементация на качване на файлове в уеб формуляри

Данните се пренасят като текст и бинарни данни. Това позволява многократна обработка на страната на сървъра.

Ефективна имплементация на качване на файлове в уеб форми

Още една полезна страна е възможността за „multiple“, за да позволи на потребителите да качват няколко файла едновременно.

Ефективна имплементация на качване на файлове в уеб формуляри

Когато добавите атрибута multiple, потребителите могат да избират повече файлове в диалоговия прозорец „Файл“.

Ефективна имплементация на качване на файлове в уеб формуляри

Имайте предвид, че трябва да добавите слушател на събития, за да управлявате избраните имена на файлове, когато потребителите избират своите файлове. Това ви дава възможност да получите достъп и до броя на качените файлове.

Ефективна имплементация на качването на файлове в уеб формуляри

Освен това можете да зададете кои файлови формати потребителят може да избира, като използвате атрибута accept.

Ефективна имплементация на качването на файлове в уеб формуляри

Например, ако искате да разрешите само JPEG или PNG изображения, можете лесно да го настроите в декларацията на входа, за да се приспособи изборът в зависимост от операционната система.

Можете също така да посочите общи формати чрез image/*, за да позволите избор на всички изображения.

Ефективна имплементация на качване на файлове в уеб формуляри

Ако искате да научите повече за възможностите на атрибута „accept“, препоръчвам ви да използвате уеб документацията на MDN.

Ефективна имплементация на качване на файлове в уеб формуляри

Тази документация предоставя обширна информация за използването на елемента Input и други функции на формата.

Резюме

Сега сте видяли как да създадете проста уеб форма с елемент за качване на файлове. Разгледахме основни концепции, включително методите за изпращане на файл към сървъра и необходимите атрибути за оптимизиране на процеса на качване.

Често задавани въпроси

Какво е разликата между GET и POST при качването на файлове?GET изпраща само имената на файловете в URL адреса, докато POST пренася съдържанието на файла като бинарни данни.

Как да се уверим, че файла е изпратен в правилния формат?Задайте атрибута enctype на формуляра на multipart/form-data за изпращане на файлове.

Мога ли да избера повече от един файл наведнъж?Да, като добавите атрибута multiple в тага за въвеждане.

Как да огранича избираемите файлови формати?Използвайте атрибута accept в тага за въвеждане, за да посочите определени файлови формати.

Къде мога да намеря повече информация за елемента input type="file"?Мрежата за разработчици на Mozilla (MDN) е превъзходен източник на подробна информация и примери.