Ninja Forms +
File Uploads

Upload files to WordPress, Google Drive, Dropbox, or Amazon S3. Upload documents, images, media, and more. Easily control file type and size. Add an upload field to any form!

Need to allow users to submit applications? Upload resumes? Other documents that are mission-critical to your business or organization?

Want visitors to be able to upload pictures, music files, even video?

Putting a good system in place for your WordPress website to accept file uploads can look like a daunting task. It’s not.

File Uploads don’t have to be complicated.

Setting up WordPress to accept files of all types is very easy. All you need are your WordPress forms!

Accept file uploads of any type with a single field on any of your WordPress forms!

A single, convenient field is all it takes to allow your users the opportunity to begin uploading. Simply add the File Upload field to any of your WordPress forms from your dashboard.

Visitors viewing the form will be able to select their file with the click of a button. The field’s progress bar keeps them in the loop as the upload progresses and completes.

file uploads settings window

Effortlessly configure uploaded files and set restrictions on the type of files you accept

Setting restrictions on file types is important for your site’s security. Within the File Uploads field setting, you can easily whitelist the extension types you want. Those and only those will be accepted by the field.

The number of uploads, file size, and storage location is all just as easily configurable. You can even rename files as they’re uploaded to fit the convention you need. Files can be renamed based on date, username, or field data.

All of this flexibility is as simple as entering text into a single field in a single location!

Easily store uploaded files on your server, media library, Dropbox, Amazon S3, or Google Drive

File Uploads stores files to your server by default, but it’s incredibly easy to change if that’s not your preference. A simple toggle in the File Upload field setting will divert uploads to your media library.

If you have a Dropbox, Amazon S3, or Google Drive account and would prefer to send files there, the integration is easy to establish. Simply verify credentials between Ninja Forms and the service of your choice from within your dashboard, and go. That’s all there is to it!

Frequently Asked Questions

How large can my uploaded files be?

Any size as long as your server can support it. The settings in this extension will NOT override your php.ini settings, for example.

Can I upload multiple files in one form?

Yes, you can add multiple upload fields or upload multiple files in a single field. There is not an option to bulk select files at this time however.

Does my upload go to my server at all even if I set it to upload to Dropbox or S3?

Yes, the file is first uploaded to your server in a tmp directory, THEN sent to DropBox or S3 as a security measure. After that the file should be deleted from your tmp directory.


3.2.5 (16 January 2020)


  • Fatal error: Cannot redeclare pcntl_signal() on some install

3.2.4 (9 January 2020)


  • Select File button not working on Internet Explorer 11 still

3.2.3 (8 January 2020)


  • Added new filter ‘ninja_forms_uploads_s3_acl’ to change the Amazon S3 ACL to ‘private’ when uploading to buckets that are set as private


  • Drag and dropping files when using multiple File Upload fields results in uploads to all fields
  • Google Drive connection getting disconnected incorrectly for some users
  • Select File button not working on Internet Explorer 11
  • Fatal errors on installs using PHP less than 7.1
  • Translatable string containing file size data could not be translated

3.2.2 (28 November 2019)


  • Fatal error on some installs running plugins with the Google API SDK

3.2.1 (25 November 2019)


  • Fatal error Uncaught Error: Call to undefined method ComposerAutoloadClassLoader::setClassMapAuthoritative()
  • Fatal error intermittently after connecting to Google Drive
  • Google Drive account disconnect when issue connecting to API

3.2.0 (5 November 2019)


  • You can now use mergetags in the ‘Rename Uploaded File’ field setting
  • Different mergetags for File Upload fields can now be selected, eg. {field:my_field_key:link}
  • New mergetag for the filename of the file, eg. {field:my_field_key:filename}
  • New mergetags for when the file has been added to the media library, eg. {field:my_field_key:attachment_url}, {field:my_field_key:attachment_embed}


  • Ability to set Amazon key and secret and other settings as constants: ‘NF_FU_AMAZON_S3_ACCESS_KEY’ and ‘NF_FU_AMAZON_S3_SECRET_KEY’


  • Nonce error when submitting a form on a page that has been cached
  • Fatal error caused when running UpdraftPlus or BackupBuddy plugin

3.1.2 (17 October 2019)


  • Use the external service name not the slug in the uploads browser table
  • Make the external service ‘Connect’ button stand out from the ‘Disconnect’ button


  • Fatal error caused when running the EDD Amazon S3 plugin
  • Mergetag output blank when running the Conditional Logic plugin

3.1.1 (10 October 2019)


  • Fatal error when uploading to Dropbox on installs with legacy Dropbox API tokens
  • Fatal error due to memory exhaustion on some installs due to large Google SDK

3.1.0 (8 October 2019)


  • Google Drive support
  • Full integration with Layout & Styles addon
  • Adds support for File Upload field to the realistic form builder
  • New minimum file size field setting
  • Add ‘View Submission’ link for each upload in the ‘Browse Uploads’ screen


  • Fixes mergetag string literal sent to actions when there are no files uploaded
  • Fixes Undefined index: type PHP notice due to mergetag code
  • Fixes links showing in submission table and ‘Browse Uploads’ screen for files that didn’t exist

3.0.27 (1 July 2019)


  • New filter: ‘ninja_forms_upload_mime_types_whitelist’ to amend the mime types global upload whitelist
  • New filter: ‘ninja_forms_upload_check_mime_types_whitelist’ to stop checking the global mime types whitelist
  • New translation pack for Polish, props DreadsSupp

3.0.26 (15 May 2019)


  • Fixes ‘No field ID supplied’ error message when post_max_size PHP config value is lower than upload_max_filesize.

3.0.25 (8 May 2019)


  • Nonce errors should no longer occur when multiple instances of the same form exist on a page.

3.0.24 (22 April 2019)


  • Fixes the bypassing of a required file upload field if a previously uploaded file is deleted.


  • Updated jQuery File Upload library to v9.30.0.

3.0.23 (11 April 2019)


  • Critical security flaws which could allow file extensions to be changed and files to be traversed (Props Jasper Weijts, Onvio)

3.0.22 (30 November 2018)


  • Attachment ID mergetag variation to be used when saving file upload to the media library, eg. {field:file_upload_22:attachment_id}

3.0.21 (29 November 2018)


  • Form cannot be submitted if there was an error uploading a file, even after deleting it
  • PHP Warning: count(): Parameter must be an array or an object that implements Countable

3.0.20 (11 October 2018)


  • Critical security flaw which could allow file extensions to be changed and files to be executed (Props Frank Spierings from Warpnet)
  • Non UTF8 characters in the %filename% tag
  • Embed mergetag variant not working if install was without Conditional Logic addon
  • Animate CSS class clashing with other theme and plugin styles

3.0.19 (26 April 2018)


  • Compatibility with form templates in Ninja Forms 3.2.23
  • Use file extension whitelist to restrict the file upload select box


  • upload_max_filesize php.ini config defined in units other than MB not working
  • Dropbox connection removed if site cannot access Dropbox temporarily

3.0.18 (27 March 2018)


  • Compatibility with Auto complete support in Ninja Forms 3.2.17


  • Fatal error when Amazon Web Services plugin installed but not activated
  • Timeout when adding new forms on certain installs

3.0.17 (18 November 2017)


  • Dropbox connection redirect 404ing on some installs
  • Only the first ‘Select Files’ button text is used for multiple fields


  • Filter added for the cron time when deleting the temp file
  • Filter added for the default ‘Select Files’ button text

3.0.16 (13 October 2017)


  • Fixed a bug that was preventing uploads from being re-saved when using the Save Progress add-on.

3.0.15 (1 Aug 2017)


  • Fix external URLs not sent to Zapier when using Zapier addon
  • Fix field max upload size bigger than server limit

3.0.14 (11 Aug 2017)


  • Fix Dropbox file uploaded with full server path when having no custom upload path

3.0.13 (10 Aug 2017)


  • German translation file, thanks @christophrado!


  • Added original filename to ninja_forms_uploads_[external service]_filename filter
  • Added more information to the help bubble for file renames to describe creating directories


  • Fix isset weirdness when checking for old NF format of file value
  • Fix method not exists when creating table if using older version of NF core.
  • Fix custom upload path not replacing %field_ shortcodes
  • Fix custom upload path not working for external (Dropbox/S3) file paths
  • Fix %formtitle% not being replaced in field rename if no custom upload path

3.0.12 (28 July 2017)


  • Dropbox uploads failing when custom path defined

3.0.11 (25 July 2017)


  • File Uploads table not created on fresh installation
  • jQuery File Upload JavaScript files clashed with Calendarize plugin

3.0.10 (12 July 2017)


  • File Uploads should work properly with non-standard WordPress databse prefixes.

3.0.9 (06 July 2017)


  • File Uploads should now work properly with Multi-Part Forms.
  • Fixed a bug with non-English characters and file name encoding.

3.0.8 ( 26 June 2017)


  • Supports Dropbox API v2
  • Custom name of file now supports changing path with field specific data


  • File appeared even if upload failed

3.0.7 ( 5 June 2017)


  • Amazon S3 uploads unable to use bucket in newer regions
  • File not deleted from server when File Upload deleted in admin
  • All File Uploads fields on form used the same nonce
  • NF 2.9 submissions not displaying in admin
  • File Upload field CSS too generic causing clashes with themes
  • PHP notice on uploads table when submission from non-logged in user
  • All Fields mergetag not using external URL
  • Missing mergetag variations used for Post Creation
  • Similar file extensions allowed even when not on file type whitelist for field

3.0.6 (12 April 2017)


  • Fixed the description text for custom file upload paths.
  • Fixed PHP warnings related to uploading a file to a remote server.
  • Links to uploaded files should now always show properly.
  • Fixed a bug that could cause unexpected output when displaying a form.

3.0.5 (07 December 2016)


  • Fixed a bug that could cause file upload fields to fail with Ninja Forms versions > 3.0.17.

3.0.4 (3 November 2016)


  • Fixed a bug with the Max File Upload Size setting.
  • Whitelisting file types should now work as explained in the help text.
  • File names can now be based upon the values of other fields using merge tags.


  • Added missing help text to the admin.

3.0.3 (28 September 2016)


  • File Uploads should now show in Conditional Logic conditions.

3.0.2 (09 September 2016)

  • Update to 3.0.2


  • Fixed SQL format that breaks dbdelta.
  • Fixed Dropbox case sensitive issues.
  • Fixed Multiple file selection bug.
  • Fixed a bug with uploading .jpg files.

3.0.1 (06 September 2016)

  • Updated with Ninja Forms v3.x compatibility

3.0 (06 September 2016)

  • Updated with Ninja Forms v3.x compatibility
  • Deprecated Ninja Forms v2.9.x compatible code

1.4.9 (09 May 2016)


  • Fixed a bug where duplicate file names could cause the extension to be changed. Credit to “fruh of citadelo” for reporting the security vulnerability.

1.4.8 (29 March 2016)


  • Fixed a bug with Dropbox that could cause uploading to Dropbox to fail.

1.4.7 (20 September 2015)


  • Fixed a bug related to buckets in Amazon S3.
  • Improved how URLs are handled when saving submissions.

1.4.6 (24 August 2015)


  • Fixed an issue with connecting to Amazon accounts.
  • Fixed several PHP notices that appeared on the uploads settings page.

1.4.5 (12 May 2015)


  • Featured images in the Post Creation extension should now function properly.
  • Save Progress extension tables should now show File Upload fields properly.

1.4.4 (26 March 2015)


  • Multiple file uploads should work properly with external services.
  • Fixed several PHP notices.

1.4.3 (12 January 2015)


  • Fixed a bug that could cause Dropbox to disconnect.
  • Fixed a bug with multi-file uploads that could cause the wrong URL to be stored in the file uploads table.
  • Fixed a PHP notice.

1.4.2 (9 December 2014)


  • Fixed a bug with PHP v5.6 and Dropbox uploads.
  • Fixed a bug that caused file renaming to work incorrectly.


  • Added a new upload location of none, where files get removed after upload.

1.4.1 (17 November 2014)


  • Fixed a bug caused by a bad commit in the previous version.

1.4 (17 November 2014)


  • Fixed two PHP notices.


  • Added filter for filename $file_name = apply_filters( ‘nf_fu_filename’ , $filename );
  • The maximum file upload size can now not exceed the server PHP setting for max file uploads.

1.3.8 (15 September 2014 )


  • File Uploads should now be compatible with Ninja Forms version 2.8 and the new notification system.
  • Performance should be noticeably increased.

1.3.7 (12 August 2014 )


  • Fixed a bug with viewing files in the edit sub page.

1.3.6 (12 August 2014)


  • Fixing a bug with file exports and version 2.7+ of Ninja Forms.

  • Fixed translation issues.


  • Added new .pot file.

1.3.5 (24 July 2014)


  • Compatibility with Ninja Forms 2.7.



  • Making sure the external upload doesn’t fire if there is no file uploaded



  • Fixed a bug with Dropbox that could cause file uploads to be sluggish.
  • is_dir() and mkdir() warnings should be cleared up.
  • Multi-file upload fields should now clear correctly when a form is submitted.



  • Fixed a bug that could cause the plugin not to activate on some systems.



  • The extension should now properly activate on all PHP versions.



  • You can now store uploaded files in Dropbox or Amazon S3! Simply select the storage location on a per-upload-field basis.


  • Fixed a PHP notice.
  • Fixed a bug that could cause some installations to lose the ninja-forms/tmp/ directory.



  • Fixed a bug that prevented required file uploads from being validated when using AJAX submissions.
  • Fixed some php notices.


  • Added support for the new Ninja Forms loading class.
  • Editing a submission from the wp-admin that includes a file will now show a link to that file instead of just the filename.



  • The format of date searching in the Browse Files tab will now be based upon the date format in Plugin Settings. i.e. you can now search dd/mm/yyyy.
  • Added the option to name a directory/file with %userid%.


  • Fixed a bug that caused file upload fields to load multiple instances or open with pre-filled, incorrect data.



  • Added a filter so that when a user uploads a file, they don’t see the directory to which it was uploaded in their email.



  • Changed the license and auto-update system to the one available in Ninja Forms 2.2.47.



  • Fixed a bug that could cause files to be added to the media library twice when used with the Post Creation extension.



  • Changed references to to the new



  • Fixed a bug that prevented files from being emailed as attachments in multi-part forms.



  • Updates for compatibility with WordPress 3.6



  • Fixed a bug that prevented Uploads from working properly with AJAX forms.
  • Fixed a bug that prevented Uploads from working properly when they were set to required.



  • Added a filter so that File Uploads will work properly with the confirmation page option of Multi-Part Forms.



  • Changed the way that file uploads with duplicate names are handled. In previous versions, the new file would simply replace the older file with the same name; now, if a file already exists with the same name as an upload, the upload is renamed with a sequential number. e.g. my-file.jpg -> my-file-001.jpg -> my-file-002.jpg -> etc.

  • Added an option to add files to the WordPress Media Library. On each file upload field, you’ll find this new option.

  • Added three new file renaming options: %displayname%, %firstname%, %lastname%. Each of these will be replaced with the appropriate user information.

  • Added a new filter named: ninja_forms_uploads_dir. This filter can be used to modify the location Ninja Forms uploads files.


  • Fixed a bug that could cause some files from uploading properly.



  • Added a new option to the [ninja_forms_field id=] shortcode. You can now use [ninja_forms_field id=2 method=url]. This will return just the url of the file. For example, you can now do something like this: .



  • Modified the way that the pre-processing is handled for more effeciency.



  • Fixed a bug that prevented files from being replaced on the backend.



  • Fixed a bug that prevented files from being replaced when editing user submissions.



  • Added the ability to search for file uploads by User ID, User email, or User login.


  • Updated code formatting.


  • Fixed a bug that was causing the new [ninja_forms_field id=3] shortcode to fail when used in conjunction with the Uploads Extension.


  • Changed the upload directory to the built-in WordPress uploads directory. This should help limit the cases of users not being able to upload files because of directory restrictions. Old files have not been moved over because it would be impossible to correctly fix links to new locations.
  • Fixed a bug that was causing some users to lose their upload record when they deactivated and reactivated the plugin.
  • Errors should now show properly for files that are over the file size limit set in the plugin settings.


  • Various bug fixes including:
  • A bug that prevented files from being moved to the proper directory.
  • A bug that prevented the “update file” link from working on pages that already had a file uploaded.
  • A bug that prevented the “featured image” functionality from working properly.

  • Added a new setting to the upload settings page for file upload URLs.


  • Various bug fixes.


  • Various bug fixes.
  • Changed the way that javascript and css files are loaded in extensions.