Form file uploads — accept resumes, screenshots, and PDFs in any HTML form
Add multipart/form-data and a file input. With Storage connected, splitforms stores the upload and links it from the notification email, dashboard, and webhook payload.
File Uploads
- ✓Standard HTML <input type="file"> — no JavaScript required, no client-side SDK
- ✓Current limit: up to 5 files per submission, 10 MB per file
- ✓Storage integration keeps text submissions working even when files are not retained
File Uploads in splitforms, shipped to production.
Add multipart/form-data and a file input. With Storage connected, splitforms stores the upload and links it from the notification email, dashboard, and webhook payload.
splitforms accepts file uploads in any HTML form — set the form's enctype to multipart/form-data, add an <input type='file'>, and you're done. The same submit endpoint handles the multipart request, so there is no client-side S3 signing flow or separate upload endpoint to maintain. File retention requires the Storage integration to be connected in the dashboard; without Storage, text fields still submit and the API reports that files were not retained. The current upload limit is 5 files per submission at 10 MB each, which covers common resumes, screenshots, briefs, PDFs, and support attachments. Use the standard accept attribute (accept='.pdf,.docx,image/*') to guide the file picker, and rely on server-side checks for safety: splitforms blocks executable and script-like extensions, sniffs content type, stores files privately, and exposes signed download links. Webhook payloads can include stored-file metadata so downstream systems can copy the files into your CRM, ticketing tool, or own storage.
file-uploads.html · live preview
Three steps. From zero to a working production setup.
How file uploads actually flows through splitforms — what you do, what we do, and what lands in your inbox.
Set enctype on your form (this is the #1 forgotten step)
Add enctype="multipart/form-data" to the <form> tag. Without it, browsers silently strip files from the POST body — the form will submit but no attachment ever arrives. For React/SPA submissions via fetch, build a FormData object and pass it as the body; do NOT set Content-Type yourself, the browser sets the multipart boundary.
Add a file input (single, multi-select, or restricted by type)
Use a normal <input type="file" name="resume">. Add the 'multiple' attribute for multi-select. Use the 'accept' attribute to filter by extension or MIME type (accept='.pdf,.docx,application/pdf,image/*'). For best UX, also wrap the input in a <label> so the click target is the visible button, not the small native control.
Read attachments from the email, dashboard, or webhook payload
With Storage connected, uploaded files are saved privately and exposed through signed download links. Webhook payloads can include a 'files' array with stored-file metadata, so your own backend can copy the files into S3, R2, Google Drive, a CRM, or a ticketing tool if you need long-term storage.
Why teams pick splitforms for file uploads.
Five reasons this is the boring, reliable choice — every one shipped by default on every plan, including free.
Standard HTML <input type="file"> — no JavaScript required, no client-side SDK
Current limit: up to 5 files per submission, 10 MB per file
Storage integration keeps text submissions working even when files are not retained
Signed download links in notification and webhook workflows after Storage is connected
Private object storage with expiring signed links
Server-side checks block executable/script-like extensions and sniff content type
Drop this into any project.
Replace YOUR_ACCESS_KEY with the key from your splitforms dashboard. No SDK install. No package to npm i. The same html you already know.
Things developers ask before they integrate.
Direct answers, no marketing fluff. Missing one? Email hello@splitforms.com.
Start using file uploads today.
Create your form, grab your access key, and ship it in five minutes. Free for 500 submissions per month, forever.
