Iptanus File Upload

Front-end file uploads for WordPress

Let visitors upload files from any page, post or sidebar widget — into your Media library, or straight to Dropbox, Google Drive, OneDrive, Amazon S3 or an FTP server.

Iptanus File Upload

What it does

A form on any page

One shortcode, or a Gutenberg block. Add your own fields, filter by size, extension or user role, and run several forms in the same post.

Files go where you need

The Media library, a NextGEN gallery, an FTP server or a cloud account. Large files upload in chunks, past the server’s own limit.

You see what arrives

A file browser and activity log in the dashboard, email notifications on upload, and a viewer your logged-in users can see too.

What it looks like

The upload form, as a visitor sees it
The Iptanus File Upload form as a visitor sees it: a file field with Select Files and Upload Files buttons, a subfolder chooser, a consent question, and a progress bar
The default form. Fields, buttons, labels and colours are all configurable.

Set-up and reference

Install it
  1. Install the plugin with the WordPress auto-installer, or download the .zip file from wordpress.org and install it from the Plugins section of your Dashboard.Or copy the wordpress_file_upload directory into the wp-content/plugins directory of your site yourself.
  2. Activate the plugin from the Plugins section of your Dashboard.
Put it on a page
  1. For an upload form, go to Dashboard / Settings / Iptanus File Upload and follow the instructions in Uploader Instances.[wordpress_file_upload]Or put the shortcode straight into the contents of any page.
  2. For a list of uploaded files, follow the instructions in Uploaded File List Instances instead.[wordpress_file_upload_browser]Or put the shortcode straight into the contents of any page.
Once it is running
  1. Open the page in your browser and you will see the upload form, or the list of files.
  2. View what has arrived from the Uploaded Files item in the Dashboard menu.
  3. Change the upload directory, or any other setting, from the small edit button at the top-left corner of the upload form.It opens the plugin options in a new window. If nothing appears, allow pop-up windows for your site.
  4. Full documentation of the plugin options is in the Options section below.

A handy Getting Started guide can be found here.

You can download the free version of the plugin by pressing the FREE version button below, or you can go for the professional version that offers multiple file uploads, captcha and much more by pressing the PRO version button. Professional licences are one-off, and their updates never expire.

Free versionPro version

The plugin offers many options for the two shortcodes, so that they can be tailored to any requirements. These options are available in the following links:

From version 2.4.1 filters and actions are supported in order to allow programmers to integrate Iptanus File Upload plugin with other plugins, extend its capabilities or perform advanced operations.

A detailed list of the plugin’s filters and actions can be found in this article.

The plugin is translated in the following languages:

Portuguese
kindly provided by Rui Alao
German
French
kindly provided by Thomas Bastide of omicronn.fr
Serbian
kindly provided by Andrijana Nikolic of webhostinggeeks.com
Dutch
kindly provided by Ruben Heynderycx
Chinese
kindly provided by Yingjun Li
Spanish
kindly provided by Marton
Italian
kindly provided by Enrico Marcolini marcuz.it
Polish
Swedish
kindly provided by Leif Persson marcuz.it
Persian
kindly provided by Shahriyar Modami chabokgroup.com
Greek

Translations in other languages are more than welcome!.

The plugin requires to have Javascript enabled in your browser. For Internet Explorer you also need to have Active-X enabled.

Please note that old desktop browsers or mobile browsers may not support all of the above features. In order to get full functionality use the latest versions of browsers, supporting HTML5, AJAX and CSS3.

You can read the Privacy Policy and Terms of Service of the plugin in the following links:

You can also read the Google Drive Privacy Policy and Terms of Service of the plugin in the following links:

Release notes

153 versions · 847 changes

What changed in each version. Grouped by major release — these entries carry no dates.

12 releases · 5.0.0 – 5.1.10 5 carry a security fix
  • Fixed bug where emails could not be sent after the release of the previous version.
  • Verified compatibility with latest 7.0 WordPress version.
  • Added uploadid length check in wfu_ajax_action_send_email_notification().
  • Added wfu_params_*, wfu_gst_* and wfu_userstate_* in periodical cleanup.
  • Added Transient Options section in Maintenance Actions tab.
  • Fixed SQL injection issue CVSS 9.3 from Patchstack.
  • Fixed File Overwrite Race Condition when uploading files with the same filename concurrently.
  • Verified compatibility with latest 6.9 WordPress version.
  • Fixed bug where a file could not be downloaded from Uploaded Files Dashboard menu.
  • Fixed double-escaped HTML code of text when Pro version is deactivated. Pro
  • Added support for FTP over TLS (FTPS) uploads.
  • Fixed bug where the visual editor of the file viewer could not be invoked when there was no upload form on the same page. Pro
  • Fixed bug where alt text and description in NGG image was not stored because NGG modified its API. Pro
  • Fixed bug where the visual editor threw warnings for not finding personaldata when Personal Data were deactivated from the plugin's Settings in Dashboard.
  • Fixed bug where a fatal error was thrown when updating the Pro version of the plugin and the extensions had to be reloaded. Pro
  • Fixed bug where Link and Remotelink columns showed HTML code instead of links, due to excessive escaping. Pro
  • Modified Messenger activation workflow due to withdrawal of Send To Messenger plugin from Meta. Pro
  • Corrected bug where the upload form visual editor was not opening when Material UI theme was active.
  • Corrected bug where notification emails were not sent when Material UI theme was active.
  • Updated vendor libraries.
  • Removal of Post Method setting from free version.
  • Removal of curl_exec, file_get_contents and sockets from wfu_get_request() and wfu_post_request() of free version.
  • Improvements on how AJAX endpoint is provided.
  • Corrections to "Requires at least" value.
  • Replacement of eval() in minification function.
  • Corrected warning where translatable constants where loaded before the plugin textdomain was loaded.
  • Further security improvements for compliance with wordpress.org.
  • Added translation for all backend of the plugin.
  • Modified plugin code so that all echoed variables to HTML are escaped.
  • Modified code so that all input is sanitized, including all $_SERVER, $_COOKIE and $_SESSION input.
  • Plugin name changed to Iptanus File Upload.
80 releases · 4.0.0 – 4.25.3 21 carry a security fix
                                                                                                                                                                  32 releases · 3.0.0 – 3.11.0 4 carry a security fix
                                                                                                                                                                                                                                  29 releases · 2.0.1 – 2.7.6 5 carry a security fix

                                                                                                                                                                                                                                                                                            Every version on one page, without JavaScript: the full changelog.

                                                                                                                                                                                                                                                                                            Free and Pro

                                                                                                                                                                                                                                                                                            The free version does not expire and is not a trial. Pro adds nineteen features. The full comparison and the price are on one page.

                                                                                                                                                                                                                                                                                            See pricing

                                                                                                                                                                                                                                                                                            894 discussions

                                                                                                                                                                                                                                                                                            Most recent: October 2025

                                                                                                                                                                                                                                                                                            Questions answered by Iptanus and other users.

                                                                                                                                                                                                                                                                                              1. Nickolas Bossinas

                                                                                                                                                                                                                                                                                                By default the plugin will replace an existing file with the uploaded one having the same filename. There are additional options if someone does not want to replace the file and reject the upload, or rename the uploaded file according to a pattern so that the names are always different.

                                                                                                                                                                                                                                                                                                Let me know if you need more info about this.

                                                                                                                                                                                                                                                                                                1. Is there a way to automatically rename files when they are uploaded? Ideally, I’d like to have users enter their name and company into fields on the upload page, and rename the file using that user info (Ex. UserCompany_UserName_2019.xlsx).

                                                                                                                                                                                                                                                                                                  Thanks!

                                                                                                                                                                                                                                                                                                    1. Thanks for responding!

                                                                                                                                                                                                                                                                                                      I have the free version.

                                                                                                                                                                                                                                                                                                      If you have instructions for adding fields for user’s name, email, etc. that would be most appreciated as well.

                                                                                                                                                                                                                                                                                                      Stuart

                                                                                                                                                                                                                                                                                                    2. Here is a link that provides a description of the additional user fields that can be added in the upload form.

                                                                                                                                                                                                                                                                                                      You can easily add them using the visual editor. They are in Additional Fields tab. It is pretty straightforward how it works.

                                                                                                                                                                                                                                                                                                      Regards

                                                                                                                                                                                                                                                                                                      Nickolas

                                                                                                                                                                                                                                                                                                    3. Thanks for linking me to the visual editor instructions – it was very straightforward.

                                                                                                                                                                                                                                                                                                      I’d super appreciate any info about using a hook to rename files using entries in additional fields (Name, Company, etc.).

                                                                                                                                                                                                                                                                                            1. Hi,

                                                                                                                                                                                                                                                                                              is it possible to automatically rotate the uploaded images based on EXIF meta data? And is it possible to show a thumbnail preview of the images before upload?

                                                                                                                                                                                                                                                                                              Thanks,
                                                                                                                                                                                                                                                                                              Arne

                                                                                                                                                                                                                                                                                              1. Nickolas Bossinas

                                                                                                                                                                                                                                                                                                You can process the contents of the file immediately after it has been uploaded using the wfu_after_file_upload action, described in the plugin’s documentation, so by implementing this action you can rotate an uploaded image, however you must write your own image processing php code.

                                                                                                                                                                                                                                                                                                Thumbnail preview is not available for the moment. However there are similar requests from other users as well, so it will be included in a future version.

                                                                                                                                                                                                                                                                                                Let me know if you need more info.

                                                                                                                                                                                                                                                                                                Best Regards

                                                                                                                                                                                                                                                                                                1. Ok, so I have a function correctImageOrientation($filename). It’s from here (last post): http://stackoverflow.com/questions/3657023/how-to-detect-shot-angle-of-photo-and-auto-rotate-for-website-display-like-desk

                                                                                                                                                                                                                                                                                                  I am not very firm in php coding, how can I call this function from wfu_after_file_upload? Can you help me? 🙂

                                                                                                                                                                                                                                                                                                  I bought your pro plugin a few days before (5th May), because the free stuff allows the users delete their uploaded files (and there is no way to turn this off). But the free plugins (like “work the flow file uploader”) can rotate images based on EXIF.

                                                                                                                                                                                                                                                                                                  1. I added a snippet via the code snippet plugin as suggested in you former post (https://www.iptanus.com/filters-and-actions-of-iptanus-file-upload-plugin/#comment-18977). Please find my code below. But the code seems not to be used since my debug line “file_put_contents(…” is not called and the debug file not created. What shall I do to have the function to rotate the image called?
                                                                                                                                                                                                                                                                                                    Thanks
                                                                                                                                                                                                                                                                                                    Daniel

                                                                                                                                                                                                                                                                                                    /* Code for adjusting images uploaded via WP File Upload (by Daniel) */
                                                                                                                                                                                                                                                                                                    function image_fix_orientation(&$image, $filename) {
                                                                                                                                                                                                                                                                                                    $exif = exif_read_data($filename);

                                                                                                                                                                                                                                                                                                    if (!empty($exif[‘Orientation’])) {
                                                                                                                                                                                                                                                                                                    switch ($exif[‘Orientation’]) {
                                                                                                                                                                                                                                                                                                    case 3:
                                                                                                                                                                                                                                                                                                    $image = imagerotate($image, 180, 0);
                                                                                                                                                                                                                                                                                                    break;

                                                                                                                                                                                                                                                                                                    case 6:
                                                                                                                                                                                                                                                                                                    $image = imagerotate($image, -90, 0);
                                                                                                                                                                                                                                                                                                    break;

                                                                                                                                                                                                                                                                                                    case 8:
                                                                                                                                                                                                                                                                                                    $image = imagerotate($image, 90, 0);
                                                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                    /*
                                                                                                                                                                                                                                                                                                    This filter runs after the upload completely finishes, in order to perform any
                                                                                                                                                                                                                                                                                                    final custom server actions.
                                                                                                                                                                                                                                                                                                    */

                                                                                                                                                                                                                                                                                                    /** Function syntax
                                                                                                                                                                                                                                                                                                    * The function takes two parameters, $changable_data and $additional_data.
                                                                                                                                                                                                                                                                                                    * – $changable_data is an array that can be modified by the filter and
                                                                                                                                                                                                                                                                                                    * contains the items:
                                                                                                                                                                                                                                                                                                    * > js_script: javascript code to be executed on the client’s browser
                                                                                                                                                                                                                                                                                                    * right after the filter; the script can check upload_status variable
                                                                                                                                                                                                                                                                                                    * for checking if upload has succeeded or not and mode variable for
                                                                                                                                                                                                                                                                                                    * checking if it was an AJAX or classic upload.
                                                                                                                                                                                                                                                                                                    * – $additional_data is an array with additional data to be used by the
                                                                                                                                                                                                                                                                                                    * filter (but cannot be modified) as follows:
                                                                                                                                                                                                                                                                                                    * > sid: this is the id of the plugin, as set using uploadid attribute;
                                                                                                                                                                                                                                                                                                    * it can be used to apply this filter only to a specific instance of
                                                                                                                                                                                                                                                                                                    * the plugin (if it is used in more than one pages or posts)
                                                                                                                                                                                                                                                                                                    * > unique_id: this id is unique for each individual upload attempt
                                                                                                                                                                                                                                                                                                    * and can be used to identify each separate upload
                                                                                                                                                                                                                                                                                                    * > files: holds an array with final data about the files that have been
                                                                                                                                                                                                                                                                                                    * uploaded (or failed); every item of the array is another array with
                                                                                                                                                                                                                                                                                                    * the following items:
                                                                                                                                                                                                                                                                                                    * >> file_unique_id: a unique id identifying every individual file
                                                                                                                                                                                                                                                                                                    * >> original_filename: the original filename of the file
                                                                                                                                                                                                                                                                                                    * >> filepath: the final path of the file (including the filename)
                                                                                                                                                                                                                                                                                                    * >> filesize: the size of the file
                                                                                                                                                                                                                                                                                                    * >> user_data: an array of user data values, if userdata are
                                                                                                                                                                                                                                                                                                    * activated, having the following structure:
                                                                                                                                                                                                                                                                                                    * >>> label: the label of the user data field
                                                                                                                                                                                                                                                                                                    * >>> value: the value of the user data fields entered by user
                                                                                                                                                                                                                                                                                                    * >> upload_result: it is the result of the upload process, taking
                                                                                                                                                                                                                                                                                                    * the following values:
                                                                                                                                                                                                                                                                                                    * success: the upload was successful
                                                                                                                                                                                                                                                                                                    * warning: the upload was successful but with warning messages
                                                                                                                                                                                                                                                                                                    * error: the upload failed
                                                                                                                                                                                                                                                                                                    * >> error_message: contains warning or error messages generated
                                                                                                                                                                                                                                                                                                    * during the upload process
                                                                                                                                                                                                                                                                                                    * >> admin_messages: contains detailed error messages for
                                                                                                                                                                                                                                                                                                    * administrators generated during the upload process
                                                                                                                                                                                                                                                                                                    * The function must return the final $changable_data. */
                                                                                                                                                                                                                                                                                                    function wfu_after_upload_handler($changable_data, $additional_data) {
                                                                                                                                                                                                                                                                                                    // Add code here…
                                                                                                                                                                                                                                                                                                    file_put_contents(‘/web/wordpress/wp-content/uploads/gaestebilder/debug.txt’, ‘DEBUG: FILTER’, FILE_APPEND);
                                                                                                                                                                                                                                                                                                    $wfu_file_path = $additional_data[0][filepath];
                                                                                                                                                                                                                                                                                                    $wfu_file_name = $additional_data[0][original_filename];
                                                                                                                                                                                                                                                                                                    // Check file type and save corrected image
                                                                                                                                                                                                                                                                                                    $extension = strtolower(strrchr($wfu_file_name, ‘.’));
                                                                                                                                                                                                                                                                                                    switch ($extension) {
                                                                                                                                                                                                                                                                                                    case ‘.jpg’:
                                                                                                                                                                                                                                                                                                    case ‘.jpeg’:
                                                                                                                                                                                                                                                                                                    $img = @imagecreatefromjpeg($wfu_file_path);
                                                                                                                                                                                                                                                                                                    $img = image_fix_orientation($img,$wfu_file_path);
                                                                                                                                                                                                                                                                                                    imagejpeg($img, $wfu_file_path);
                                                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                                                    case ‘.gif’:
                                                                                                                                                                                                                                                                                                    $img = @imagecreatefromgif($wfu_file_path);
                                                                                                                                                                                                                                                                                                    $img = image_fix_orientation($img,$wfu_file_path);
                                                                                                                                                                                                                                                                                                    imagegif($img, $wfu_file_path);
                                                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                                                    case ‘.png’:
                                                                                                                                                                                                                                                                                                    $img = @imagecreatefrompng($wfu_file_path);
                                                                                                                                                                                                                                                                                                    $img = image_fix_orientation($img,$wfu_file_path);
                                                                                                                                                                                                                                                                                                    imagepng($img, $wfu_file_path);
                                                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                                                    default:
                                                                                                                                                                                                                                                                                                    $img = false;
                                                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                    return $changable_data;
                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                    add_filter(‘wfu_after_upload’, ‘wfu_after_upload_handler’, 10, 2);

                                                                                                                                                                                                                                                                                                    /* END Code for adjusting images uploaded via WP File Upload (by Daniel) */

                                                                                                                                                                                                                                                                                                2. Hey Nikolas
                                                                                                                                                                                                                                                                                                  Will it also be possible to include thumbnails in email-notifications, in order to have a small preview of the files that have been uploaded? I would be a great feature anyway 😉

                                                                                                                                                                                                                                                                                                  Regards Michael

                                                                                                                                                                                                                                                                                                  1. Hi, thumbnails do not work well in emails. There are some common methods of adding thumbnails in emails, however it is not certain that they will work. Are you the only receiver of email notifications? If yes, which email client do you use?

                                                                                                                                                                                                                                                                                                    Nickolas

                                                                                                                                                                                                                                                                                            2. Hey
                                                                                                                                                                                                                                                                                              I can upload most of the files but never a file called site-imedia.psd which is a 4 mb file. I don’t undestand…

                                                                                                                                                                                                                                                                                              Here is my code:
                                                                                                                                                                                                                                                                                              —-

                                                                                                                                                                                                                                                                                              [wordpress_file_upload uploadpath=”uploads/files_upload/” uploadrole=”all” maxsize=”100″ uploadtitle=”Nom Fichier” uploadpatterns=”*.*” selectbutton=”Sélectionner” uploadbutton=”Envoi” successmessage=”Le fichier %filename% a bien été envoyé !” warningmessage=”Le fichier %filename% a généré des erreurs…recommencez” notify=”true” notifyrecipients=”david.bolender@gmail.com” notifyheaders=”Vous avez reçu un fichier !” notifymessage=”Vous avez reçu un fichier !%n%%n%Expéditeur : %username%%n%Nom fichier : %filename%%n%Chemin : %filepath%”]

                                                                                                                                                                                                                                                                                            Ask a question

                                                                                                                                                                                                                                                                                            Answered by Iptanus, usually within a working day.

                                                                                                                                                                                                                                                                                            Ask a question

                                                                                                                                                                                                                                                                                            This site uses Akismet to reduce spam. Learn how your comment data is processed.

                                                                                                                                                                                                                                                                                            Scroll to Top