Fileupload
Release dato: 16.02.2026
Sist oppdatert: 18.02.2026
File upload lar brukeren laste opp vedlegg og bilder. Komponenten stÞtter drag and drop, filvelger, flere filer, kommentarer og forhÄndsvisning av bilder. Dette krever at serveren som tar i mot skjemadataene stÞtter filopplasting. PÄ mobil kan man brukeren velge Ä ta et bilde med kamera, eller velge en eksisterende fil.
Test komponenten
Relaterte komponenter
For fritekst nÄr fil ikke trengs, f.eks. for kommentarer.
For feil og status ved opplasting.
For Ä vise fremdrift pÄ opplasting.
Varianter
File upload kan brukes i to forskjellige typer basert pÄ hva du forventer at brukeren skal laste opp.
| Type | Bruk |
|---|---|
| Vedlegg | Laster opp dokumenter og andre filtyper, viser filnavn i listeform |
| Bilde | Laster opp bilder og viser forhÄndsvisning i kort |
File upload gir ogsÄ muligheten til mer funskjonalitet i de opplastede filene (dette gjelder ikke bildevisningen).
| Funksjonalitet | Bruk |
|---|---|
| Statisk | Viser liste over filer med navn |
| Med kommentar | Viser feltet âLegg til kommentarâ ved hver fil |
| Med navneendringer | Lar brukeren redigere visningsnavnet til filen |
Retningslinjer for bruk
Bruk file upload nÄr
- brukeren skal sende inn dokumentasjon, skjema, kvitteringer eller bilder som del av en prosess
UnngÄ fileupload nÄr
- du egentlig bare ber brukeren velge noe som allerede finnes i systemet, da er det bedre med select, combobox eller sĂžk
- du bruker filopplasting som en omvei for informasjon som kunne vĂŠrt fylt inn som tekst
NÄr skal du bruke bilde-preview i file upload?
Bruk bildevarianten (preview) nÄr det viktigste for brukeren er Ä se hva bildet viser, ikke bare hvilket filnavn det har.
- Vis forhÄndsvisning i et kort med filnavn og handling
- Vurder Ă„ begrense antall bilder, og fortell tydelig hvis det er en Ăžvre grense
Vi anbefaler ikke Ä kombinere preview av bilder og filer, dersom bruker kan laste opp bÄde bilder og filer, anbefaler vi vanlig listevisning av opplastede elementer.
Gi tydelig tilbakemelding pÄ status
Vis alltid hvilket steg filen er i: venter, laster opp, ferdig eller feilet. Det kan vÊre lurt Ä bruk fremdriftsindikator for stÞrre filer eller nÄr opplastning kan ta tid.
Husk at status ogsÄ mÄ vÊre lesbar med skjermleser, ikke bare med farge og animasjon.
Drag and drop med alternativ
Drag and drop oppleves effektivt, men kan vÊre vanskelig for enkelte brukere og pÄ mobil. Selv om komponenten er fleksibel, anbefaler vi Ä alltid ha bÄde drag and drop og lenke for Ä velge fil/bilde, og unngÄ Ä gjÞre drag and drop til eneste mÄte Ä laste opp filer pÄ.
GjĂžr slik
UnngÄ
Gi nok informasjon og riktig feilmelding
- Tillat bare relevante filformater, og vis dette eksplisitt i hjelpeteksten inne i selve feltet. Dette kan presiseres i hjelpetekst.
- Sett en fornuftig grense for filstĂžrrelse, og forklar hvorfor store filer ikke kan lastes opp.
- Gi konkrete rÄd ved feil, for eksempel at brukeren kan komprimere et bilde eller lagre som et annet format.
Feilmeldingen mÄ opptre i riktig kontekst. Gir du feil pÄ opplastet fil skal dette vises under hele feltet. Dersom det er en feil i filen eller opplastningen feiler, skal dette vises pÄ den aktuelle filen.
Responsivitet
File upload skal fungere godt pÄ alle skjermstÞrrelser og ikke dekke for mye av innholdet.
- Dropzonen skalerer i bredde
- PĂ„ smĂ„ skjermer kan linjelange filnavn brytes eller trunkeres med ââŠâ
- Drag and drop fungerer dÄrlig pÄ mobil, sÄ brukeren mÄ ha et alternativ. Gi brukeren mulighet til Ä klikke pÄ en lenke eller drop zonen med klikk.
Universell utforming
File upload er et skjemaelement og bĂžr fĂžlge de samme prinsippene som andre felter i Punkt.
Feilmeldinger
Feilmeldinger skal vĂŠre tydelige, konkrete og plassert nĂŠr feltet:
- Fortell hva som er feil, og hva brukeren mÄ gjÞre for Ä rette det
- Marker bÄde komponenten og den konkrete filen som har feil
- Ikke vis feilmeldinger kun med fargeendring
Les mer om universell utforming av file upload:
Skriv gode ledetekster og instruksjoner i skjema
Tips til hvordan du skriver gode, tydelige ledetekster
Anatomi
| Element | Beskrivelse |
|---|---|
| 1. Label | Tittel/etikett over feltet (valgfritt) |
| 2. Hjelpetekst | Forklaring under feltet (valgfritt) |
| 3. Dropzone | Gir brukeren mulighet til Ă„ dra inn filer |
| 4. Beskrivende tekst | Tekst med lenke og informasjon om filformat |
| 5. Fil under opplastning | Fil som lastes opp (med progressbar) |
| 6. Ferdig opplastet fil | Fil som er lastet opp |
| 7. Handlinger | Mulighet for Ă„ legge til handlinger (rediger, kommentar eller slett) |
Implementasjon i kode
Hvordan ta komponenten i bruk?
import { PktFileUpload } from '@oslokommune/punkt-react'; Testing
For web component-varianten (<pkt-fileupload>), mÄ dere i JSDOM (eller liknende) vente til custom elementet er registrert fÞr dere tester:
await window.customElements.whenDefined("pkt-fileupload");For React-komponenten (PktFileUpload) trengs ikke dette, men i testmiljÞ kan dere mÄtte polyfille ResizeObserver og DataTransfer.
data-testid (og andre input-attributter) videresendes til den underliggende native <input type="file">.
Bruk i skjema
I React-implementasjonen kan komponenten brukes bĂ„de som âcontrolledâ og âuncontrolledâ. I tilfelle âcontrolledâ, mĂ„ webappen
holde state, og angi denne i value-attributten. Webappen mÄ ogsÄ angi onFilesChanged-attributten for Ä ta i mot oppdateringer.
Uansett kan komponenten brukes pÄ to forskjellige mÄter:
- med
uploadStrategy="form", hvor komponenten oppfÞrer seg som en<input type='file' />. Brukeren velger en eller (vedmultiple) flere filer, og disse lastes opp nÄr brukeren submitter skjemaet. - med
uploadStrategy="custom", hvor webapplikasjonen mÄ implementere egen logikk for Ä laste opp filer, for eksempel via XHR. Dette gjÞr det mulig Ä vise en framdriftsindikator for opplastingen.
BÄde i form- og custom-modus kan komponenten ha noen tilleggsfunksjoner:
- mulighet for Ă„ angi eget filnavn (
renameFilesEnabled), hvor et ekstra input-felt lar brukeren angi et nytt filnavn - mulighet for Ă„ gi en kommentar til hver fil (
addCommentsEnabled), hvor et textarea lar brukeren skrive en kommentar i fritekst - (eksperimentelt) andre tilleggsfunksjoner som webappen kan tilby ved Ă„ implementere typen
QueueItemExtension, og plugges inn iextraOperations
Her er et ganske komplett eksempel pÄ bruk av bÄde form- og custom-varianten:
Et server-endepunkt som tar i mot en filopplasting kan se sÄnn ut:
Props og tokens
Egenskaper
| Prop | Type | Beskrivelse |
|---|---|---|
name | string | Navn for innsending |
value | FileItemList | Liste over filer i komponenten. Bruk denne for controlled-modus. |
defaultValue | FileItemList | Default-verdi nÄr komponenten brukes 'uncontrolled'. Ingen grunn til at denne ikke skal vÊre tom array `[]` |
onFilesChanged | (files: FileItemList) => void | Kalles nÄr fil(er) legges til, fjernes eller oppdateres |
multiple | boolean | Tillat opplasting av flere filer |
addCommentsEnabled | boolean | La brukeren skrive en kommentar pr fil. Kommentarene postes i felter med navn `{fileupload-navn}-comment` |
renameFilesEnabled | boolean | La brukeren angi et navn pr fil. Filnavnene postes i felter med navn `{fileupload-navn}-targetFilename` |
uploadStrategy | 'form' | 'custom' | Velg mellom skjemaopplasting (filene sendes nÄr skjemaet sendes inn) og bakgrunnsopplasting (webappen hÄndterer opplasting via `onFileUploadRequested` og oppdaterer `transfers`). |
itemRenderer | 'filename' | 'thumbnail' | ItemRendererType | Hvordan filer skal vises i opplastings-kÞen. Enten filnavn eller som thumbnails. Du kan ogsÄ (eksperimentelt) lage din egen komponent. |
truncateTail | number | Hvordan lange filnavn skal forkortes med ellipse i kĂžen. Med `4` vil filnavnet vises som `langt-filnavn-med ... .pdf`. Med verdi `0` kommer ellipsen til slutt. |
fullWidth | boolean | Om komponenten skal ta full bredde av foreldreelementet |
allowedFormats | string[] | Liste over tillatte filformater. F.eks. ['pdf', 'jpg', 'png'] eller ['image/*', 'application/pdf'] |
formatErrorMessage | string | Tilpasset feilmelding ved ugyldig filtype. |
maxFileSize | string | number | Maksimal filstĂžrrelse. F.eks. '5MB', '500KB', '1GB' eller antall bytes |
sizeErrorMessage | string | Tilpasset feilmelding ved for stor fil. |
onFileValidation | (file: File) => string | null | KjĂžrer etter innebygd format/stĂžrrelse-validering. Returner feilmeldingsstreng hvis ugyldig, null hvis gyldig. |
errorMessage | string | Feilmelding for Ă„ vise under komponenten (ekstern/programmatisk feil) |
hasError | boolean | Om komponenten har en feiltilstand |
disabled | boolean | Deaktiverer hele komponenten - ingen interaksjon mulig |
label | string | Etikett/tittel over komponenten |
helptext | string | ReactNode | Hjelpetekst under etiketten |
optionalTag | boolean | Vis 'Valgfritt'-tag ved etiketten |
requiredTag | boolean | Vis 'MĂ„ fylles ut'-tag ved etiketten |
enableImagePreview | boolean | Aktiver forhÄndsvisning av bilder i modal (kun for thumbnail-visning) |
extraOperations | Array<QueueItemExtension> | Ekstra operasjoner pr fil (eksperimentelt). Hvis du trenger flere operasjoner enn kommentar, filnavn og slett, kan du implementere det som en egen komponent |
onFileUploadRequested | (fileItem: FileItem) => void | Ved `uploadStrategy='custom'` blir denne funksjonen kalt nÄr brukeren velger en eller flere filer. Dette lar webappen sette i gang opplasting i bakgrunnen. |
transfers | Array<FileTransfer> | Ved `uploadStrategy='custom'` vil du fortelle komponenten om pÄgÄende overfÞringer her. Hver fil har en progress-verdi. |
onTransferCancelled | (fileItemId: string) => void | Kalles nÄr brukeren klikker 'Slett' eller 'Avbryt'. Webappen mÄ dermed avbryte opplastingen av denne fila. |