https://framer.com/m/Fileuploaderuppy-ZJ3prh.js

Io / Enhancements / FileUploadComponent

FileUploadComponent

FileUploadComponent gives a form a drop area that accepts files, turns away the wrong types and anything oversized, and shows the reader what they picked.

Enhancements27 controlsdrop arearesumable uploads
Enhancements12 controlsdrop areatype and size checks

Examples

Live specimens for every control the component exposes.

Default

Files can be dropped or chosen. The component checks type and size before accepting, then previews the result and fires onUploadComplete.

Drag & drop or click to browse: Max 10MB

What is accepted

allowAllFiles opens the gate to everything; turn it off and allowedTypes decides. maxFileSize turns away anything larger, and multiple lets more than one file through at a time.

anything, 5 MB

Drag & drop or click to browse: Max 5MB

max 1 MB

Drag & drop or click to browse: Max 1MB

multiple files

Drag & drop or click to browse: Max 10MB · up to 10

States

required marks the field as mandatory in the surrounding form. successMessage is what the reader reads once a file is through, and showFilePreview decides whether they see it. stallTimeout abandons an upload that stops making progress, errorReportUrl posts failures to a webhook of your own, and showErrorDetails decides how much of the reason the reader sees.

required

Drag & drop or click to browse: Max 10MB

no preview

Drag & drop or click to browse: Max 10MB

custom message

Drag & drop or click to browse: Max 10MB

Props

The controls exposed on the instance panel.

PropTypeBehaviour
n8nWebhookUrlstringn8n webhook the file is posted to. The workflow must answer with JSON: { url, name?, fileId? }.
folderIdstringSent to the workflow alongside the file. What it means is up to the n8n side.
fieldNamestringName of the hidden input carrying the uploaded URL. In multi-file mode it is comma-separated.
requiredbooleanMarks the field as mandatory in the surrounding form.
multiplebooleanAllows more than one file.
maxFilesnumberCeiling on how many, once multiple is on.
allowAllFilesbooleanAccepts any type; turn off to use allowedTypes.
allowedTypesarrayExtensions that are accepted.
maxFileSizenumberLargest file that will be taken, in MB.
stallTimeoutnumberSeconds without progress before an upload is abandoned. 0 turns the watchdog off.
errorReportUrlstringOptional. Failures are POSTed here as JSON via sendBeacon, so there is no CORS preflight.
showErrorDetailsbooleanWhether the reader sees why a file was refused, or just that it was.
successMessagestringShown once a file is through.
showFilePreviewbooleanShows what was picked.
placeholderstringThe line the drop area reads before anything is chosen.
customFontbooleanOff uses the theme's --font-family and Callout token; on reveals font. Note: its panel label is Font, and its DSL key is $control__font.
fontfontThe face, only when customFont is on.
textColor / iconColorcolorInk and icon. Empty resolves to --field-text and --field-text-secondary.
backgroundcolorPanel fill. Empty resolves to --field-background.
errorColorcolorColour a refusal is written in. Empty resolves to --warning-color.
borderborderEmpty resolves to --borderwidth-normal dashed --border-color.
radiusSizeenumnone · tiny · small · normal · large · circle · custom, from the theme --radius-* scale.
customRadiusradiusUsed only when radiusSize is custom.
paddingSizeenumnone · tiny · xs · small · normal · large · xl · custom, from the theme --padding-* scale.
customPaddingpaddingUsed only when paddingSize is custom.
shadowshadowEmpty is no shadow.
onUploadCompleteeventFires once a file has been accepted.
PropTypeBehaviour
n8nWebhookUrlstringn8n webhook the file is posted to. The workflow must answer with JSON: { url, name?, fileId? }.
folderIdstringSent to the workflow alongside the file. What it means is up to the n8n side.
fieldNamestringName of the hidden input carrying the uploaded URL. In multi-file mode it is comma-separated.
requiredbooleanMarks the field as mandatory in the surrounding form.
multiplebooleanAllows more than one file.
maxFilesnumberCeiling on how many, once multiple is on.
allowAllFilesbooleanAccepts any type; turn off to use allowedTypes.
allowedTypesarrayExtensions that are accepted.
maxFileSizenumberLargest file that will be taken, in MB.
stallTimeoutnumberSeconds without progress before an upload is abandoned. 0 turns the watchdog off.
errorReportUrlstringOptional. Failures are POSTed here as JSON via sendBeacon, so there is no CORS preflight.
showErrorDetailsbooleanWhether the reader sees why a file was refused, or just that it was.
successMessagestringShown once a file is through.
showFilePreviewbooleanShows what was picked.
placeholderstringThe line the drop area reads before anything is chosen.
customFontbooleanOff uses the theme's --font-family and Callout token; on reveals font. Note: its panel label is Font, and its DSL key is $control__font.
fontfontThe face, only when customFont is on.
textColor / iconColorcolorInk and icon. Empty resolves to --field-text and --field-text-secondary.
backgroundcolorPanel fill. Empty resolves to --field-background.
errorColorcolorColour a refusal is written in. Empty resolves to --warning-color.
borderborderEmpty resolves to --borderwidth-normal dashed --border-color.
radiusSizeenumnone · tiny · small · normal · large · circle · custom, from the theme --radius-* scale.
customRadiusradiusUsed only when radiusSize is custom.
paddingSizeenumnone · tiny · xs · small · normal · large · xl · custom, from the theme --padding-* scale.
customPaddingpaddingUsed only when paddingSize is custom.
shadowshadowEmpty is no shadow.
onUploadCompleteeventFires once a file has been accepted.

Usage

Guidance carried over from the component definition.

Reach for FileUploadComponent

A form needs an attachment as well as text fields.

The wrong type or an oversized file should be refused before submission.

Readers should see what they picked before sending it.

The reader should be told what is wrong before they try to submit.

Reach for something else

The file has to be stored somewhere — this hands it over, it does not host it.

You need a whole form — use SmartFormFields.

Uploads must resume or run in the background.

Io — Enhancements

Every specimen above is a live component instance. Colour, type and radius resolve from the project theme tokens.

io

An experiment in what a design system becomes when AI can consume it.

© 2026 io

Contact me

Create a free website with Framer, the website builder loved by startups, designers and agencies.