Ką reiškia enctype='multipart/form-data'
HTML formoje ir kada ją naudoti?
Kai siunčiate POST užklausą, turite tam tikru būdu užkoduoti duomenis, kurie sudaro užklausos turinį.
HTML formose numatyti trys kodavimo būdai.
application/x-www-form-urlencoded
(numatytasis)multipart/form-data
text/plain
Buvo rengiamasi pridėti application/json
, tačiau to buvo atsisakyta.
(Kitos koduotės galimos, kai HTTP užklausos generuojamos naudojant kitas priemones, o ne HTML formos pateikimą.)
Daugumai kūrėjų formatų specifika nėra svarbi. Svarbūs šie dalykai:
text/plain
.Kai rašote kliento pusės kodą:
multipart/form-data
, kai jūsų formoje yra kokių nors <input type="file">
elementųmultipart/form-data
arba application/x-www-form-urlencoded
, tačiau application/x-www-form-urlencoded
bus efektyvesnisKai rašote serverio pusės kodą:
Dauguma jų (pavyzdžiui, Perl's CGI->param
arba PHP's $_POST
superglobal) pasirūpins skirtumais už jus. Nesistenkite analizuoti neapdorotų įvesties duomenų, kuriuos gauna serveris.
Kartais rasite biblioteką, kuri negali apdoroti abiejų formatų. Populiariausia Node.js'formų duomenų tvarkymo biblioteka yra body-parser, kuri negali tvarkyti daugiapartinių užklausų (tačiau jos dokumentacijoje rekomenduojama keletas alternatyvių bibliotekų, kurios tai gali daryti).
Jei rašote (arba derinate) biblioteką, skirtą neapdorotiems duomenims analizuoti arba generuoti, reikia pradėti rūpintis formatu. Galbūt taip pat norėsite apie jį žinoti įdomumo dėlei.
application/x-www-form-urlencoded
yra daugiau ar mažiau tas pats, kas užklausos eilutė URL pabaigoje.
multipart/form-data
yra gerokai sudėtingesnis, tačiau jis leidžia į duomenis įtraukti ištisus failus. Rezultato pavyzdį galima rasti HTML 4 specifikacijoje.
text/plain
įvestas HTML 5 ir yra naudingas tik derinimui - iš specifikacijos: (Jų negalima patikimai interpretuoti kompiuteriu - teigčiau, kad kiti kartu su įrankiais (pavyzdžiui, daugumos naršyklių kūrėjų įrankių skirtuku Net) tam yra tinkamesni).
enctype='multipart/form-data
yra kodavimo tipas, leidžiantis siųsti failus per POST. Paprasčiausiai be šios koduotės failų negalima siųsti per POST.
Jei norite leisti naudotojui įkelti failą per formą, turite naudoti šį enctype.
Pateikdami formą nurodote naršyklei, kad HTTP protokolu į tinklą išsiųstų pranešimą, tinkamai įkomponuotą į TCP/IP protokolo pranešimo struktūrą. HTML puslapyje yra būdas siųsti duomenis į serverį: naudojant `