!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

Javascript
canvas
HTML5
File
Børre Stenseth
? Browser Support ?
HTML >Lokale filer

Lokale filer

Hva
Tilgang til lokale filer fra HTML5

Heldigvis er det slik at vi ikke uten videre kan lese lokale filer fra den maskinen som kjører websidene vår. Vi kan heller ikke skrive til den uten videre. Begge deler er mulig, men de fordrer et initiativ og kontroll fra brukeren.

Lese. Vi vet at vi kan bruke input-elementet av type file in en form. Se f.eks. modulen Forms Files . Når vi setter opp et slikt element får vi en "browse"-button og vi kan lokalisere filer på harddisken. Når vi så submitter formen går fila med. I denne modulen skal vi se at vi kan gripe inn og laste opp fila direkte. Vi skal også se at vi kan bruke "drag and drop" mulighetene i HTML5 til å plukke opp filer.

Skrive. Vi har få muligheter for å skrive fra websiden til den lokal harddisken. Vi kan spare hele vevsiden, vi kan bruke copy-paste på tekst vi er interessert i, eller vi kan spesielt for bilder høyre-klikke og "Save Image as".

Det vi skal gjøre er basert på W3C's File API [1] . Denne skal altså hjelpe oss å handtere, lese, lokale filer i litt forskjellige formater og på forskjellig måte. De sentrale begrepene er:

  • File er en fil med informasjon som navn, mimetype og referanse til selve filinnholdet, alt bare for lesing.
  • FileList er en list av File-objekter
  • FileReader er en leser som kan lese innholdet av et File-objekt.
  • Blob gir oss mulighet for å lese deler av et filinnhold.

Siden vi beveger oss litt i kanten av hva alle nettlesere handterer kan vi sjekke tilstanden med følgende script:

if (window.File && window.FileReader && window.FileList &&window.Blob) {
  // ok we do nothing
} else {alert('The File API is not fully supported ny your browser');}

En FileReader leser en fil asynkront. De viktigste metodene:

  • readAsText(blob|file, encoding)
  • readAsDataURL(blob|file)
  • readAsArrayBuffer(blob|file)

De to første er brukt nedenfor. Det er interessant å merke seg at det formatet som lages av readAsdataURL er det samme formatet som vi kan bruke både som kilde til et bilde i en Canvas og som src i et img-element, se Wikipedia [2] .

Nedenfor skal vi laste bilder og tekst både ved hjelp av å browse lokalmaskinen og ved hjelp av HTML5' drag and drop.

Når vi så har fått tak i datene, kan vi selvsagt bearbeide dem, legge dem ut på siden for "copy and paste" eller vi kan sende dem til serveren med f.eks. et Ajax kall. I eksemplene nedefor er det bare gjort viderebehandling av lastede bilder. Her kan du tegne rett på bildet (lagret i en canvas, ved hjelp av et enkelt processig-skript, se modulen Processing .

Bilder

Last opp en fil

Fast bildebredde:
Originalbilde
(skalert)
Canvas
tegn med mus
Resultat. Høyreklikk og
"Save Image As .."
 

Den involverte Javascriptkoden er slik:

_loadImage.js

Selve tegningen som du kan gjøre på canvas er implementert ved hjelp av processing og pde-skriptet er slik:

_draw.pde

Drag and Drop

Drop bildefil(er) her

Den involverte Javascriptkoden er slik:

_dndImage.js

Text

Last opp

 

Den involverte Javascriptkoden er slik:

_loadTxt.js

Drag and Drop

Drop tekstfiler her

Den involverte Javascriptkoden er slik:

_dndTxt.js
Referanser
  1. W3C FileApi dev.w3.org/2006/webapi/FileAPI/ 02-08-2012
  1. Base64 Wikipedia en.wikipedia.org/wiki/Base64 02-08-2012
  1. HTML5Rocks www.html5rocks.com 15-04-2011
Vedlikehold

B. Stenseth, august 2012

( Velkommen ) HTML >Lokale filer ( iframe )