WordPress Plugins
Free Tools
Claude Skills
Pricing Blog Switch to Royal Plugin Graveyard Support My Account Cart
Support / FormForge / File Uploads

File Uploads: Setup and TroubleshootingPRO

Let visitors attach files to their form submissions, whether that’s resumes, contracts, portfolios, ID scans, or anything else your form needs. This page walks through adding a file upload field, restricting allowed extensions and size, enabling multi-file uploads, receiving files in notification emails, and troubleshooting the four most common upload failures.

Shortest path to a working upload

Drag the File Upload field onto the form canvas → click it → set Allowed File Types to what you want (e.g. pdf, doc, docx) → set Maximum File Size (MB) to a sane cap (e.g. 10) → leave Maximum Files at 1 unless you want multi-file → Save Changes and Save Form. Test with a real upload on a Private page.

How file uploads work

The File Upload field is a standard HTML file picker rendered with FormForge’s styling and the per-field restrictions you configure. When a visitor submits the form, FormForge routes the upload through WordPress’s wp_handle_upload() function, which validates the MIME type against your allowed-types list, drops the file into the WordPress uploads directory (usually wp-content/uploads/YYYY/MM/), and stores the resulting public URL in the entry.

The URL is then available in three places: FormForge > Entries (the admin table), the notification email that fires on submission (as a clickable link), and any integration you’ve wired up (Zapier, Google Sheets, webhook), each of which receives the URL as the field value.

Add a file upload field to your form

Open the form in the builder

Go to FormForge > All Forms and click the form name to open the drag-and-drop builder.

Drag the File Upload field onto the canvas

The field palette is in the left sidebar under Advanced Fields. Drag File Upload to wherever you want it in the form. The default label is “File Upload”, so rename it to something specific (“Upload your resume”, “Attach a signed contract”) so visitors know what to submit.

Click the field to open its settings panel

The settings panel appears on the right. Under the General tab you’ll see the field’s Label and Description. Below those, four file-specific settings appear.

Configure the four file settings

See the reference table in the next section for exact behavior. In short: pick allowed extensions, pick a size cap, decide single-file or multi-file, and decide whether the upload is required.

Save the field settings, then save the form

Click Save Changes at the bottom of the field settings panel, then click Save Form at the top right of the builder. Both saves are required.

Embed the form on a Private page and test

Set the page’s Visibility to Private, submit a test upload with a file that matches your allowed types and size, and confirm: (a) the submission page shows a success message, (b) the file appears in FormForge > Entries as a clickable link, (c) the notification email you receive contains a clickable link to the file.

File upload field settings

Setting What it does Example
Allowed File Types Comma-separated list of file extensions the field will accept. Leave empty to allow every extension WordPress’s core MIME allowlist recognizes. pdf, doc, docx
Maximum File Size (MB) Per-file size cap in megabytes. Uploads larger than this reject with a clear error. Default is 5 MB when left blank. 10
Maximum Files How many files a visitor can upload in this one field. Leave at 1 for single-file. Set higher (e.g. 5) to render a multi-file picker. 5
Minimum Files Required Bottom bound on file count. 0 means the field is optional. 1 or higher requires that many uploads before the form will submit. 1
The plugin cap and the server cap are two separate limits

Maximum File Size (MB) is FormForge’s own limit. But your web server has its own limits too: the PHP settings upload_max_filesize and post_max_size. If either of the server limits is smaller than what you configure in FormForge, the server rejects the upload before FormForge ever sees it. Whichever is smaller wins. See the troubleshooting section for how to raise the server limits.

What visitors see on the form

The field renders as an HTML file picker. Below it, a hint line shows the allowed extensions and the max size, so the visitor knows what’s accepted before they open the file dialog:

Allowed: pdf, doc, docx | Max size: 10MB

If Maximum Files is set above 1, the browser’s file dialog opens in multi-select mode (Ctrl-click or Cmd-click to pick several files at once). Modern browsers also render the count and combined size once files are selected.

If the visitor picks a file that violates the allowed types or exceeds the size cap, they see an error message immediately after clicking Submit. The rest of the form fields keep whatever they typed, so only the file field flags the error and only the file needs to be re-picked.

Where uploaded files land

Files land at the standard WordPress uploads path, under a year/month subdirectory:

wp-content/uploads/2026/09/example-file.pdf

The public URL to that file is what FormForge stores in the entry. You can view / download the file from three places:

Uploaded files are publicly accessible by URL

FormForge follows WordPress’s standard media convention: uploaded files live under wp-content/uploads/, which is a public directory. Anyone with the URL can view the file, so it works the same way every mainstream WordPress form plugin does. If you’re collecting sensitive documents (resumes with home addresses, signed contracts, ID scans, medical records), that’s worth designing around. Two options that keep the FormForge front-end unchanged: (1) pair the form with an access-control plugin that gates the uploads/ directory behind authentication; (2) route submissions to a private storage service via the Zapier or webhook integration, and have the file uploaded to WordPress serve as a temporary handoff only.

File uploads in notification emails

When the notification email fires, each uploaded file renders inside the message body as a clickable anchor: the visible text is the filename, and the underlying URL points at the uploaded file. Recipients can click straight through to download.

For a multi-file field (Maximum Files greater than 1), each uploaded file renders as its own separate link, comma-separated in the same row.

Files are linked in the notification email, not attached. If the recipient needs the file, they click through to download it from the link.

Related: email deliverability

If the notification never arrives at all, the fix is almost never something specific to file uploads. See Email Notifications: Setup and Troubleshooting for the general playbook (spoiler: install an SMTP plugin like Royal SMTP).

Two PHP server settings override FormForge

WordPress and FormForge sit on top of PHP, and PHP has its own upload limits set at the server level. These override anything FormForge configures, so if the server says “no file larger than 2 MB”, no plugin can accept larger.

Setting What it caps Typical default
upload_max_filesize Largest individual file that can be uploaded via a form. 2M or 8M
post_max_size Largest total form submission body, which includes every field value plus every uploaded file combined. 8M

Both settings need to be at least as large as the biggest upload you want to accept. Rule of thumb: post_max_size should be somewhat larger than upload_max_filesize to accommodate other form fields alongside the file.

To check what your server is currently set to, go to Media > Add New in the WordPress admin. The page shows “Maximum upload file size: X MB” near the top, so that’s the smaller of the two PHP settings.

How to raise the PHP limits

The cleanest path is to ask your host to raise them via their control panel, and most managed WordPress hosts have a one-click UI for this. If that’s not available, three DIY options in order of preference:

Confirm the change took effect by reloading Media > Add New in the admin. The “Maximum upload file size” line should reflect the new value.

Troubleshooting the four common failures

1. “File upload failed” on files that seem fine

Almost always a PHP server-limit problem, not a FormForge problem. The upload hits upload_max_filesize or post_max_size before FormForge’s validator runs, and PHP surfaces a generic error that FormForge shows as “File upload failed.” Fix: raise both PHP settings (see the section above). Confirm the fix by uploading a file that’s (a) smaller than your FormForge Max File Size and (b) smaller than the new PHP limits, so it should succeed.

2. “File type not allowed” on a file with the right extension

Two things can trigger this. First, check that your Allowed File Types list includes the extension exactly, so pdf, not .pdf or PDF (case-insensitive is fine, but the leading dot isn’t). Second, WordPress checks the file’s MIME type against its core allowlist, not just the extension: a file renamed from malware.exe to resume.pdf still gets rejected because its bytes don’t match the PDF MIME signature. If a legitimate file (unusual extension, custom format) hits this, the WordPress core allowlist may not cover it, so ask on support with the file extension and a sample file.

3. “File size exceeds maximum allowed” but the file is under the FormForge cap

Check the FormForge field’s Maximum File Size (MB) setting. The error message shows the exact cap in play, so match your file’s actual size (visible in your file manager) against that cap. If the file is genuinely under the cap and this error still fires, the field settings didn’t save properly, so reopen the field, re-enter the cap, click Save Changes, then click Save Form. Refresh the form’s embed page and retry.

4. Multi-file upload only accepts one file

Confirm Maximum Files is set to a number greater than 1 in the field settings. If it’s set to 1 (or blank), the field renders as a single-file picker regardless of any other setting. After raising it and re-saving, hard-refresh the form’s embed page (Ctrl+Shift+R / Cmd+Shift+R) to bust any cached HTML.

Still stuck after all four checks?

Gather: (a) exact error message the visitor sees, (b) filename, extension, and size of the file that fails, (c) your host name (so we know the likely PHP limits), (d) the field’s Allowed File Types + Max File Size + Max Files values, (e) whether other visitors have successfully uploaded to this form. Send to support and we can dig in.

FAQ

How do I add a file upload field to a FormForge Pro form?

Open the form in the builder, drag the File Upload field from the field palette onto the canvas, and click it to open the settings panel. Configure Allowed File Types (comma-separated extensions), Maximum File Size (in megabytes), Maximum Files (set above 1 for multi-file), and Minimum Files Required. Save the field, save the form, and embed on a page.

Where do uploaded files go?

Uploaded files land in the standard WordPress uploads directory, typically wp-content/uploads/YYYY/MM/ where YYYY/MM is the year and month of the upload. The full public URL is stored in the entry and shown in FormForge > Entries. Notification emails include a clickable link to each uploaded file.

Why do file uploads fail even though the size is under the plugin’s limit?

Two PHP settings on your web server take precedence over FormForge’s per-field limit: upload_max_filesize (per-file cap) and post_max_size (total POST body cap, which includes ALL fields plus file). If either is smaller than your form’s configured Max File Size, uploads will fail with a generic “File upload failed” error. Ask your host to raise both to at least 32 MB (or larger if you accept bigger files), or add corresponding lines to php.ini or .htaccess. See Two PHP server settings override FormForge.

Can visitors upload multiple files in one field?

Yes. Set Maximum Files to any number greater than 1 (e.g. 5). The field renders a multi-file picker; visitors can select several files at once or add them one at a time. Each uploaded file is stored as its own URL in the entry, and notification emails render each as a separate clickable link.

Are uploaded files publicly accessible?

Yes. Uploaded files land at a public URL under wp-content/uploads/, following the standard WordPress media convention. Anyone with the URL can view the file, so it works the same way every mainstream WordPress form builder does. If you’re collecting sensitive documents (resumes, contracts, ID scans), pair FormForge with a hardening plugin that gates uploads behind authentication, or route sensitive uploads to a private storage provider via the Zapier integration.

What file types should I allow?

Only what your form actually needs. Common patterns: resumes accept pdf, doc, docx. Portfolios accept jpg, png, pdf. Contract signing accepts pdf only. Never allow executable extensions (exe, php, js, sh, bat). WordPress’s built-in MIME filter rejects those by default, but tightening your Allowed File Types list gives visitors a clearer error message and reduces attack surface.

How do I let the visitor upload a file bigger than the WordPress default 2 MB?

Two settings need to increase: (1) the FormForge field’s Maximum File Size (MB), which you set in the field settings panel; (2) the PHP upload_max_filesize and post_max_size server settings, which usually need a host-side change or a php.ini / .htaccess edit. FormForge cannot exceed the server-side limits regardless of what you configure in the field.

Are files sent as email attachments or as links?

As clickable links in the notification email body, not as attachments. This scales better with large files and multi-file uploads, and avoids the aggressive attachment stripping that many corporate spam filters apply.

What happens to uploaded files when I delete an entry?

Deleting an entry from FormForge > Entries removes the entry record but does not delete the physical uploaded file from wp-content/uploads/. To remove the file too, go to the WordPress Media Library and delete it there, or use FTP / your host’s file manager. This behavior mirrors WordPress core (deleting a post doesn’t automatically delete its attached media either).