FileUpload
Om komponenten
FileUpload lar brukere laste opp egne filer. En filopplasting finnes vanligvis i skjemaer, men kan også brukes som et frittstående element.
Egnet til:
- Laste opp én eller flere filer
Uegnet til:
- Ikke bruk FileUploader i en modal, da de opplastede filene stables vertikalt
Relaterte komponenter

Varianter
Standard Fileuploader
Som default tillater FileUpload kun én fil
<UNSAFE_FileUpload> <Label>Last opp fil</Label> <Description>Du kan laste opp én fil.</Description> <Button>Velg fil</Button> </UNSAFE_FileUpload>
Fileuploader med mulighet for flere filer
Men dette kan kontrolleres ved å sette allowsMultiple på komponenten.
<UNSAFE_FileUpload allowsMultiple> <Label>Last opp filer</Label> <Description> Du kan laste opp flere filer. Du kan laste de opp samtidig. </Description> <Button>Velg filer</Button> </UNSAFE_FileUpload>
FileUploader med begrensninger
Det er også mulig å sette begrensninger på filtype og andre egenskaper som f.eks. størrelse.
<UNSAFE_FileUpload acceptedFileTypes={['.pdf']} validate={(file) => file.size < 1000000 || 'Filen kan ikke være større enn 1MB' } > <Label>Last opp PDF</Label> <Description>Maks filstørrelse er 1MB. Støttet filtyper er: .pdf.</Description> <Button>Velg PDF</Button> </UNSAFE_FileUpload>
FileUploader i forms
FileUploader kan brukes i forms, på samme måte som andre input-komponenter. Siden den er bygget på en native HTML <input type="file"/>.
På samme måte som en native HTML file-input persisterer browseren formData som en FileList.
Når en file-input er tom vil FormData for feltet være et array med et File objekt uten name og size 0, f.eks:
[ File { size: 0, type: 'application/octet-stream', name: '', lastModified: 1747292502560 } ]
Det kan derfor være hensiktsmessig å sikre at dette "dummy" objektet blir filtrert vekk i en submit handler, f.eks:
<form className="flex flex-col items-start gap-4 p-4" encType="multipart/form-data" onSubmit={(e) => { e.preventDefault(); const formData = new FormData(e.target as HTMLFormElement); const files = formData .getAll('files') // Filter out any "dummy" File object if FileUpload is empty .filter((file) => file instanceof File && file.size > 0 && file.name); alert( `Lastet opp ${files.map((file) => (file as File).name).join(', ')}`, ); }} > <UNSAFE_FileUpload validate={(file) => file.size < 1000000 || 'Filen er for stor'} allowsMultiple name="files" > <Label>Last opp filer</Label> <Description> Du må laste opp minst én fil, du kan laste opp flere. Filene kan ikke være større enn 1 MB. </Description> <Button variant="secondary">Velg fil</Button> </UNSAFE_FileUpload> <Button type="submit">Send inn</Button> </form>
Eller så er det mulig å bruke FileUpload som en controlled component, å holde på filene i en egen state.
function () { const [files, setFiles] = React.useState<File[]>([]); return ( <div className="p-4"> <UNSAFE_FileUpload files={files} onChange={setFiles} allowsMultiple> <Label>Last opp filer</Label> <Description>Du kan laste opp flere filer.</Description> <Button>Velg filer</Button> </UNSAFE_FileUpload> Filer: {files?.map((file) => file.name).join(', ')} </div> ); }
Retningslinjer
(Kommer)

Formatering
Anatomi

- Label Label bør reflektere handlingen, som standard står det “Last opp filer”
- Beskrivelse Her skal det kun stå relevant informasjon som begresninger og muligheter
- CTA Teksten i button bør reflektere beskrivelsen og label, som standard står det “Last opp filer”

Universell utforming
Husk på
- Hold deg til korte, konsise tekster i knappen. Det skal være enkelt for brukeren å forstå hva som skjer om de trykker på knappen.
- Husk å bruke en
<Label>elleraria-label
Sjekkliste
✓ Sikret at Label, beskrivelse og knapp har kort og konsis tekst og er forklarende.
✓ Jeg har sjekket kontrasten med bakgrunnen på knappen at den ikke er under 3.1.1 i kontrast.
✓ Sikret at komponenten er navigerbar med tastatur
✓ Sikret at komponenten er fokuserbar med focus
✓ Bruker riktige ARIA roller og live regions til å kommunisere fil til brukere av skjermlesere.
Les mer
Les mer informasjon om tekster i knapper
WCAG 1.1.1 Non-text Content (A)
Props
FileUpload
| Prop | Description | Default |
|---|---|---|
children? | - | |
id? | - | |
name? | - | |
value? | - | |
builtinValidation? | - | |
isRequired? | Whether user input is required on the input before form submission. | - |
isInvalid? | Whether the input value is invalid. | - |
validationState? | @deprecated Use isInvalid instead. | - |
validationBehavior? | Whether to use native HTML form validation to prevent form submission when the value is missing or invalid, or mark the field as required or invalid via ARIA. | 'aria' |
validate? | A function that returns an error message if a given value is invalid.
Validation errors are displayed to the user when the form is submitted
if validationBehavior="native". For realtime validation, use the isInvalid
prop instead. | - |
acceptedFileTypes? | - | |
allowsMultiple? | - | |
defaultCamera? | - | |
acceptDirectory? | - | |
files? | - | |
errorMessage? | - | |
| Events | ||
onChange? | - | |