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

Varianter

File upload kan brukes i to forskjellige typer basert pÄ hva du forventer at brukeren skal laste opp.

TypeBruk
VedleggLaster opp dokumenter og andre filtyper, viser filnavn i listeform
BildeLaster opp bilder og viser forhÄndsvisning i kort
Eksempel pÄ vedlegg fileuploadEksempel pÄ bilde fileupload

File upload gir ogsÄ muligheten til mer funskjonalitet i de opplastede filene (dette gjelder ikke bildevisningen).

FunksjonalitetBruk
StatiskViser liste over filer med navn
Med kommentarViser feltet “Legg til kommentar” ved hver fil
Med navneendringerLar brukeren redigere visningsnavnet til filen
Eksempel pÄ vedlegg fileuploadEksempel pÄ bilde fileupload

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.

Filopplasting med fremdriftsindikatorFilopplasting uten fremdriftsindikator

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

Eksempel pÄ drag and drop med alternativ for Ä legge til filer
Gi brukeren mulighet til Ä bÄde dra en fil inn og velge fil via klikk pÄ lenke

UnngÄ

Eksempel pÄ drag and drop uten alternativ for Ä legge til filer
UnngÄ Ä kun gi brukeren mulighet til Ä dra filer inn i en file upload

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.

Eksempel pÄ fileupload med feilmelding.Eksempel pÄ fileupload med feilet opplasting av fil.

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.
File upload pÄ mobil

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:

Anatomi

ElementBeskrivelse
1. LabelTittel/etikett over feltet (valgfritt)
2. HjelpetekstForklaring under feltet (valgfritt)
3. DropzoneGir brukeren mulighet til Ă„ dra inn filer
4. Beskrivende tekstTekst med lenke og informasjon om filformat
5. Fil under opplastningFil som lastes opp (med progressbar)
6. Ferdig opplastet filFil som er lastet opp
7. HandlingerMulighet for Ă„ legge til handlinger (rediger, kommentar eller slett)
File upload anatomi.

Implementasjon i kode

Hvordan ta komponenten i bruk?

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 (ved multiple) 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 i extraOperations

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

PropTypeBeskrivelse
namestringNavn for innsending
valueFileItemListListe over filer i komponenten. Bruk denne for controlled-modus.
defaultValueFileItemListDefault-verdi nÄr komponenten brukes 'uncontrolled'. Ingen grunn til at denne ikke skal vÊre tom array `[]`
onFilesChanged(files: FileItemList) => voidKalles nÄr fil(er) legges til, fjernes eller oppdateres
multiplebooleanTillat opplasting av flere filer
addCommentsEnabledbooleanLa brukeren skrive en kommentar pr fil. Kommentarene postes i felter med navn `{fileupload-navn}-comment`
renameFilesEnabledbooleanLa 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' | ItemRendererTypeHvordan filer skal vises i opplastings-kÞen. Enten filnavn eller som thumbnails. Du kan ogsÄ (eksperimentelt) lage din egen komponent.
truncateTailnumberHvordan 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.
fullWidthbooleanOm komponenten skal ta full bredde av foreldreelementet
allowedFormatsstring[]Liste over tillatte filformater. F.eks. ['pdf', 'jpg', 'png'] eller ['image/*', 'application/pdf']
formatErrorMessagestringTilpasset feilmelding ved ugyldig filtype.
maxFileSizestring | numberMaksimal filstĂžrrelse. F.eks. '5MB', '500KB', '1GB' eller antall bytes
sizeErrorMessagestringTilpasset feilmelding ved for stor fil.
onFileValidation(file: File) => string | nullKjĂžrer etter innebygd format/stĂžrrelse-validering. Returner feilmeldingsstreng hvis ugyldig, null hvis gyldig.
errorMessagestringFeilmelding for Ă„ vise under komponenten (ekstern/programmatisk feil)
hasErrorbooleanOm komponenten har en feiltilstand
disabledbooleanDeaktiverer hele komponenten - ingen interaksjon mulig
labelstringEtikett/tittel over komponenten
helptextstring | ReactNodeHjelpetekst under etiketten
optionalTagbooleanVis 'Valgfritt'-tag ved etiketten
requiredTagbooleanVis 'MĂ„ fylles ut'-tag ved etiketten
enableImagePreviewbooleanAktiver forhÄndsvisning av bilder i modal (kun for thumbnail-visning)
extraOperationsArray<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) => voidVed `uploadStrategy='custom'` blir denne funksjonen kalt nÄr brukeren velger en eller flere filer. Dette lar webappen sette i gang opplasting i bakgrunnen.
transfersArray<FileTransfer>Ved `uploadStrategy='custom'` vil du fortelle komponenten om pÄgÄende overfÞringer her. Hver fil har en progress-verdi.
onTransferCancelled(fileItemId: string) => voidKalles nÄr brukeren klikker 'Slett' eller 'Avbryt'. Webappen mÄ dermed avbryte opplastingen av denne fila.