Opplasting av filer i Forms
Grunnformen er slik:
HTML-fragmentet er slik:
<fieldset style="width:300px;padding:20px">
<legend>upload en tekstfil</legend>
<form action="http://www.it.hiof.no/~borres/cgi-bin/forms/std.py"
method="post"
enctype="multipart/form-data">
<div>
<input type="file" name="minfil" size="40" accept="text/*"/>
</div>
<div>
<input type="submit" value="Send"/>
</div>
</form>
</fieldset>
Vi ser at feltet gir opphav til både et tekst-felt og en browser knapp.
Her må vi bruke metoden: post.
accept
Det er mulig å bruke attributten accept som brukes til å angi hva slags filer som vil aksepteres av tjeneren. Verdien er lovlige MIME-typer. F.eks. vil accept="text/*" godta MIME-typer: text/plain, text/html osv. Dersom accept ikke brukes vil alle filtyper ansees lovlige.
Hvordan kan vi kontrollere at det vi sender virkelig er riktig mime-type ? Ideelt sett skulle nettleseren kontrollere dette, men det er ikke alltid tilfelle. Vi kan forsøke med litt javakode.
HTML-fragmentet er slik:
<fieldset style="width:350px;padding:15px">
<legend>upload en tekstfil</legend>
<form action="http://www.it.hiof.no/~borres/cgi-bin/forms/std.py"
method="post"
enctype="multipart/form-data">
<div>
<input accept="text/*" name="minfil" id="minfil" size="40" type="file"/>
</div>
<div>
<input id="sender" type="submit" value="Send"/>
</div>
</form>
<div id="message"> </div>
</fieldset>
<script>document.getElementById('minfil').addEventListener('change', control, false);</script>
og javaskriptet er slik
function control(evt)
{
var msg=document.getElementById('message');
var sender=document.getElementById('sender');
msg.innerHTML='';
if(!evt.target.accept)
{
sender.style.display='block';
return;
}
var a=evt.target.accept.split('/');
var files = evt.target.files;
var b=files[0].type.split('/');
// compare what we want with what we got
if ((a[0] == b[0]) &&
((a[1] == b[1])||(a[1]=='*')||(b[1]=='*')))
{
sender.style.display='block';
}
else
{
msg.innerHTML='feil fil type, vil ha: '+evt.target.accept;
sender.style.display='none';
}
}
multiple
HTML5 tillater mutiple filer
Et enkelt eksempel uten accept-kontroll(, og mot et serverskript som ikke gjør det beste ut av saken)
HTML-fragmentet er slik:
<fieldset style="width:300px;padding:20px">
<legend>upload flere bildefiler (jpg, png,gif)</legend>
<form action="http://www.it.hiof.no/~borres/cgi-bin/forms/std.py"
method="post"
enctype="multipart/form-data">
<div>
<input type="file" id="files" multiple="" name="files[]" size="40" accept="image/*"/>
</div>
<div id="message3"> </div>
<div>
<input type="submit" onclick="return control(this.form);" value="Send"/>
</div>
</form>
</fieldset>
<script>document.getElementById('files').addEventListener('change', handleFileSelect2, false)</script>
og javaskriptet er slik
function handleFileSelect2(evt) {
var files = evt.target.files;
var T='';
// check on type may be done here
for (var i = 0, f; f = files[i]; i++) {
T+='<li>'+f.name+'('+f.type+') : '+ f.size+'bytes </li>';
}
document.getElementById('message3').innerHTML = '<ul>' + T + '</ul>';
}