How to Add Drag and Drop File Upload to Contact Form 7 (No Coding Required)
If you’ve ever tried to get Contact Form 7 to accept more than one file at a time, you already know the frustration. CF7 ships with a basic file field, and it works fine for a single resume or a single image. The moment someone needs to attach three photos, a PDF and a Word doc in one submission, you’re stuck.
I built Drag and Drop Multiple File Upload for Contact Form 7 for exactly this reason. Over 60,000 sites are running it right now, and after ten years of maintaining WordPress plugins, this is still one of the questions I get asked the most: “How do I let people upload multiple files through my contact form?” So let’s walk through it properly.
Why Contact Form 7’s Default Upload Falls Short
The native [file] tag in CF7 does one job: it accepts one file, checks the extension against a whitelist, and attaches it to the outgoing email. There’s no drag-and-drop, no progress bar, and no way to let a visitor upload five files in the same field. If you run a print shop, a job application page, a design agency, or a support form where people need to send screenshots, this becomes a real bottleneck. People either give up or start emailing you separately, which defeats the purpose of having a form.
What Changes Once You Add the Plugin
Once it’s active, CF7 gets a new tag called [mfile]. You drop it into your form the same way you’d drop in a text field, and the front end instantly gets a proper drag-and-drop zone with a progress bar, file previews, and the option to remove a file before hitting submit. A few things worth knowing before you install it:
- You can set a file size limit per field, right down to the byte, so you’re not caught off guard by a 200MB video someone tries to sneak through.
- You choose which extensions are allowed. If you only want PDFs and images, you lock it down to that.
- Visitors can drag in several files at once, or click to browse the old-fashioned way, whichever they prefer.
- Files can either go out as email attachments the way CF7 normally handles them, or as download links in the message body, which is the better option once file sizes start climbing past what Gmail or Outlook will accept as an attachment.
Setting It Up
- Install and activate the plugin from your WordPress dashboard, or upload it manually if you’re not comfortable with the plugin search.
- Open any Contact Form 7 form you want to edit, and look for the new “Multiple File Upload” button above the form field generator. Clicking it opens a small panel where you set the field name, file size limit, allowed file types and maximum number of files.
- Insert the generated
[mfile]tag into your form template. - Go to your CF7 mail settings and, if you want the files attached to the notification email, reference the field name in the “File Attachments” box. If you’d rather send links instead of attachments, there’s a checkbox for that under Contact > Drag & Drop Upload, and you’ll paste the field’s shortcode into the message body instead.
- Save, then test the form yourself before pointing real traffic at it.
That’s genuinely the whole process. No custom code, no editing PHP files, no digging through the CF7 codebase.
One Thing to Know About the Free Version
Uploaded files land temporarily in a folder inside /wp-content/uploads/, and they’re automatically cleared out an hour after the form is submitted, which mirrors how CF7 itself handles file uploads by default. For most contact forms this is fine, since the files have already gone out by email at that point. If you need the files to stick around longer, get compressed into a ZIP, get renamed automatically, or get pushed straight to Google Drive, Dropbox or Amazon S3 instead of your own server, that’s what the Pro version handles.
Where People Usually Get Stuck
The two support questions I answer most often are about file size limits and file type restrictions, so here’s the quick version of both:
Changing the file size limit. Add a limit parameter directly to your shortcode, in bytes. For example, [mfile upload-file-433 limit:20971520] caps that field at 20MB. The default is 5MB if you don’t set anything.
Restricting file types. Same idea, using the filetypes parameter: [mfile upload-file-433 filetypes:jpeg|png|jpg|gif] only accepts those four formats. This is worth doing even if you don’t think you need it, since it’s your first line of defense against someone uploading something they shouldn’t.
When You’d Want the Pro Version
The free plugin covers the vast majority of contact forms just fine. Where I see people upgrade is when they need one of these:
- Cloud storage instead of your server. Files get pushed directly to OneDrive, Google Drive, Amazon S3, Dropbox or your own FTP, which matters once you’re dealing with large files or want to keep your hosting storage lean.
- Custom folder structures, so files land somewhere organized by date, by CF7 field, by the logged-in user, or by a folder name you define yourself.
- Image previews and resizing for forms where people are uploading photos.
- Chunked and large file uploads, useful for design agencies or video submission forms where a single file can run into the hundreds of megabytes.
- A record of form entries saved inside WordPress admin, so you’re not relying solely on email.
If none of that applies to you yet, stick with the free version. It’s not a stripped-down trial, it’s a genuinely complete tool on its own.
A Quick Word on Security
CF7 file upload plugins are a common target for automated attacks, simply because file upload fields are one of the easier ways for a bad actor to try slipping something malicious onto a server. This plugin gets regular security patches (you can see the changelog on the WordPress.org page), and if you’re running any file upload field on a public form, keeping the plugin updated is not optional. Set your site to auto-update plugins, or at minimum check for updates monthly.
Try It Yourself
You can grab the free version from WordPress.org and have a working multi-file upload field in your contact form in the next ten minutes. If your project outgrows the free tier later, the Pro version is a straightforward upgrade with the same settings screen, just more options underneath it.
