Přenos souboru z počítace uživatele na server


Přenos souboru z klienta na server řeší RFC1867.

HTML formuláře pro odeslání souboru

RFC1867 přináší tři změny při tvorbě formuláře na HTML stránce. Příklad zdrojového tvaru formuláře:

<FORM ENCTYPE="multipart/form-data" ACTION="/cgi-bin/prenos.pl" METHOD=POST>
Vaše jméno:  <INPUT NAME=jm  SIZE=40><BR>
Jméno přenášeného souboru:
                   <INPUT NAME=jmeno1 TYPE=FILE SIZE=40><BR>
Datum:  <INPUT NAME=dat SIZE=10><P>
<INPUT TYPE=SUBMIT VALUE="Odeslani souboru">
<INPUT TYPE=RESET VALUE="Zacit znovu">
</FORM>

Interpretace formuláře klientským programem:

Atributy ve spojení s TYPE=FILE

Zpětná kompatibilita

Starší prohlížeče mohou k přenosu souboru použít helper aplikaci. CGI script od staršího prohlížeče obdrží v kódování aplication/x-www-form-urlencoded jméno souboru na místo jeho obsahu. Jako odpověď může CGI script poslat řetězec, který bude zpracován na straně klienta helper aplikací. Může to být datový řetězec typu application/x-please-send-files, který obsahuje:
Prohlížeč musí být nakonfigurován tak, aby po obdržení odpovědi typu application/x-please-send-files spustil helper aplikaci. Helper aplikace by měla generovat data ve tvaru, který se očekává od nových verzí prohlížečů, viz. dále. Na straně serveru pak stačí ke zpracování požadavků od starších i novějších prohlížečů jeden CGI script.

Použití kódování multipart/form-data

Pole formuláře jsou poslána v pořadí, ve kterém jsou uvedena ve formuláři. Pole jsou oddělena hraniční čarou "boundary". Každá část je identifikována jménem z atributu INPUT ve formuláři. Každá část může být uvozena odpovídajícím content-type, pokud je známý nebo application/octet-stream. Pokud je vybráno více souborů budou přenášeny použitím formátu multipart/mixed.

Jméno původního souboru je předáno v parametru filename nebo v hlavičče content-disposition: form-data.

CGI program specifikovaný v atributu ACTION musí očekávat data v kódování multipart/form-data.

Příklad:

Při použití předchozího formuláře obdrží server data od klienta ve tvaru:

-----------------------------24125315913874
Content-Disposition: form-data; name="jm"

Jan Novak
-----------------------------24125315913874
Content-Disposition: form-data; name="jmeno1";filename="C:\ZIP\Prac\s1.txt"
Content-Type: text/plain

Zacatek prvniho souboru
.
.
.
konec prvniho souboru
-----------------------------24125315913874
Content-Disposition: form-data; name="dat"

20/8/1996
-----------------------------24125315913874--