MARKETPLACE
PLUGINS
CLOUDINARY UPLOADER
Cloudinary Uploader logo

Cloudinary Uploader

Published August 2022
   •    Updated December 2025

Plugin details

Unleash the full potential of your digital media & transform images and videos to load faster with no visual degradation, automatically generate image and video variants, and deliver high quality responsive experiences to increase conversions.
This plugin provides a a complete, interactive user interface that enables your users to upload files from a variety of sources to your website or application along with picture cropping capabilities.
It also supports signed uploads and expiring download links.

The demo application link: https://cloudinarydemo.bubbleapps.io/version-test

💡 𝗦𝘂𝗯𝘀𝗰𝗿𝗶𝗽𝘁𝗶𝗼𝗻𝘀 𝗮𝗿𝗲 𝗽𝗿𝗼𝗿𝗮𝘁𝗲𝗱. 𝗜𝗳 𝘆𝗼𝘂 𝗶𝗻𝘀𝘁𝗮𝗹𝗹 𝗮𝗻𝗱 𝘂𝗻𝘀𝘂𝗯𝘀𝗰𝗿𝗶𝗯𝗲 𝘁𝗵𝗶𝘀 𝗽𝗹𝘂𝗴𝗶𝗻 𝗶𝗻 𝗼𝗻𝗲 𝗱𝗮𝘆 𝘁𝗼 𝘁𝗲𝘀𝘁 𝗶𝘁 𝗼𝘂𝘁, 𝘆𝗼𝘂'𝗹𝗹 𝗼𝗻𝗹𝘆 𝗯𝗲 𝗰𝗵𝗮𝗿𝗴𝗲𝗱 𝟭/𝟯𝟬𝘁𝗵 𝗼𝗳 𝘁𝗵𝗲 𝗺𝗼𝗻𝘁𝗵𝗹𝘆 𝘀𝘂𝗯𝘀𝗰𝗿𝗶𝗽𝘁𝗶𝗼𝗻 𝗳𝗲𝗲.

📖 𝗦𝘁𝗲𝗽-𝗯𝘆-𝗦𝘁𝗲𝗽 𝗶𝗻𝘀𝘁𝗿𝘂𝗰𝘁𝗶𝗼𝗻𝘀 𝗮𝗿𝗲 𝘁𝗵𝗲 "𝗜𝗻𝘀𝘁𝗿𝘂𝗰𝘁𝗶𝗼𝗻𝘀" 𝘀𝗲𝗰𝘁𝗶𝗼𝗻 𝗮𝗻𝗱 𝗗𝗲𝗺𝗼 𝗘𝗱𝗶𝘁𝗼𝗿 𝗶𝘀 𝗶𝗻 𝘁𝗵𝗲 "𝗟𝗶𝗻𝗸𝘀" 𝘀𝗲𝗰𝘁𝗶𝗼𝗻 𝗼𝗳 𝘁𝗵𝗲 𝗣𝗹𝘂𝗴𝗶𝗻 𝗣𝗮𝗴𝗲.

Our plugin portfolio: https://bubble.io/contributor/wiseable-1586609424436x711052886532460500

Contact us at [email protected] for any additional feature you would require or support question.

$5

Per month

4.8 stars   •   4 ratings
88 installs  
This plugin does not collect or track your personal data.

Platform

Web & Native mobile

Contributor details

wise:able logo
wise:able
Joined 2020   •   122 Plugins
View contributor profile

Instructions

1️⃣: CLOUDINARY UPLOADER WIDGET =============================

📋 ELEMENT DESCRIPTION
--------------------------------
CLOUDINARY UPLOADER WIDGET is a complete, interactive user interface that enables your users to upload files from a variety of sources to your website or application along with picture cropping capabilities.

🔧 STEP-BY-STEP SETUP
--------------------------------
0) Sign-up for CLOUDINARY: https://cloudinary.com/users/register_free, note the CLOUDINARY CLOUD NAME assigned to your account.

1) In CLOUDINARY CONSOLE, go to SETTINGS > UPLOAD -> UPLOAD PRESETS, enable an UPLOAD PRESET. You may use either SIGNED or UNSIGNED presets. Note the UPLOAD PRESET NAME. See https://support.cloudinary.com/hc/en-us/articles/360016481620-What-are-Upload-presets-and-how-to-use-them for more information.

2a) Register on plugins.wiseable.io. Create a new Credential which associates your BUBBLE APP URL with your CLOUDINARY API SECRET.
The registration service will generate your PUBLIC ACCESS KEY. This key serves as a secure proxy for your real CLOUDINARY API SECRET. It allows your application to communicate with the service without exposing your real CLOUDINARY API SECRET. Since this PUBLIC ACCESS KEY is explicitly tied to your registered BUBBLE APP URL, it can only be used from that domain, ensuring that even if the key is publicly visible, it remains safe and cannot be misused by unauthorized sources.

2b) In the Plugin Settings, enter the following:
  - CLOUDINARY CLOUD NAME
  - CLOUDINARY API KEY
  - PUBLIC ACCESS KEY (generated from plugins.wiseable.io)

3) Drag and drop the CLOUDINARY UPLOADER WIDGET element in your app.

4) Select the element and configure the APPEARANCE fields:

FIELDS:
- OUTPUT TYPE: Returned type. Must always be set to FILE METADATA (Cloudinary)
- UPLOAD PRESET: Upload presets allow defining a set of actions that would occur upon the upload of a resource. These actions could be performing a transformation, changing the access control of a resource, applying an add-on capability, and many other options. See https://support.cloudinary.com/hc/en-us/articles/360016481620-What-are-Upload-presets-and-how-to-use-them
- MULTIPLE: Whether selecting and uploading multiple assets is allowed.
- CROPPING: Set to yes if you want to allow your users to interactively crop their images before uploading them to Cloudinary.  Cropping is supported only with single-file uploading so make sure to also set the multiple widget parameter to no in order to enable interactive cropping.
- SINGLE UPLOAD AUTOCLOSE: Whether the Upload widget automatically closes after the upload completes.
- AUTO MINIMIZE: Automatically minimize the widget after the upload begins.
- SHOW UPLOAD MORE BUTTON: Whether the Upload More button will be displayed after the upload completes.
- SHOW ADVANCED OPTIONS: Whether to display the Advanced options, which enables users to set the Public ID, Add a Tag, and select an Upload Preset
- DEFAULT SOURCE: The source that's selected when the widget is opened.
- SOURCES ORDER: Display order of the sources, comma separated. Valid values are : local | url | camera | dropbox | image_search | facebook | instagram | shutterstock | gettyimages | istock | unsplash | google_drive
- EMBEDDED MODE: Enables embedding the widget inside your web page instead of it appearing as a modal dialog.
- MAXIMUM FILES: The maximum number of files allowed in multiple upload mode. If a user selects or drags more than the allowed amount, no files will be uploaded
- MAX FILE SIZE: If specified, perform client-side validation to prevent uploading files larger than the given bytes size.  Default: null (no client-side limit)  Example: 5500000 (5.5 MB) Notes:  - Applies to local files only - Upload size is limited on the server side by the maximum file size set in your account's Usage Limits - The preview, crop, and pixel-count options are not available for files larger than 40 MB (the files can still be uploaded)
- FOLDER: Folder name for all uploaded assets. Acts as the prefix of assigned public IDs.
- ALLOWED FORMATS: Allows client-side validation of the uploaded files based on their file extensions. You can specify one or more file extensions, and/or limit the allowed files to "video" or "image". Only applies when uploading files from a local device. Expected format is comma-separated file extensions (jpg,gpf,mp4)
- MAX IMAGE FILE SIZE: If specified, perform client-side validation to prevent uploading image files larger than the given bytes size.  Default: null (no client-side limit)  Example: 1500000 (1.5 MB) Notes:  - Overrides maxFileSize (if set) for images  - Applies to local files only - Upload size is limited on the server side by the maximum file size set in your account's Usage Limits - The preview, crop, and pixel-count options are not available for files larger than 40 MB (the files can still be uploaded)
- MAX IMAGE WIDTH: f specified, client-side scale-down resizing takes place before uploading if the width of the selected file is larger than the specified value.
- MAX IMAGE HEIGHT: If specified, client-side scale-down resizing takes place before uploading if the height of the selected file is larger than the specified value.
- MIN IMAGE WIDTH: If specified, client-side validation takes place before uploading. If the width of the selected file is smaller than the specified value, the upload is cancelled.
- MIN IMAGE HEIGHT: If specified, client-side validation takes place before uploading. If the height of the selected file is smaller than the specified value, the upload is cancelled.
- MAX VIDEO FILE SIZE: If specified, perform client-side validation to prevent uploading video files larger than the given bytes size.  Default: null (no client-side limit)  Example: 15000000 (15 MB) Notes:  - Overrides maxFileSize (if set) for videos  - Applies to local files only - Upload size is limited on the server side by the maximum file size set in your account's Usage Limits
- MAX RAW FILE SIZE: If specified, perform client-side validation to prevent uploading raw files larger than the given bytes size.  Default: null (no client-side limit)  Example: 2000000 (2 MB) Notes:  - Overrides maxFileSize (if set) for raw files  - Applies to local files only - Upload size is limited on the server side by the maximum file size set in your account's Usage Limits
- THEME: The name of a predefined widget theme. Widget behavior is the same for all themes.  Supported themes: default, white, minimal, purple, custom. Use Custom for the below section.
- LOCAL: Upload a file from your local device. Adds the My Files source option.
- URL: Upload a file from a remote location. Adds the Web Address source option.
- CAMERA: Upload an image file via the device's camera. Adds the Camera source option. Note: Desktop/laptop only - a mobile device's camera is accessed through the local (My Files) source option.
- DROPBOX APP KEY: Add the App key of your Dropbox App to enable this source.
- GOOGLE SEARCH API KEY: Add the API key for your Google Custom Search account to enable this source.
- FACEBOOK: Upload an image from a Facebook account. Adds the Facebook source option.
- FACEBOOK APP ID: The App ID of your own application for accessing your users' Facebook accounts. If not provided, uses the Cloudinary Media Upload app.
- INSTAGRAM: Upload an image from an Instagram account. Adds the Instagram source option.
- INSTAGRAM CLIENT ID: The App ID of your own application for accessing your users Instagram accounts. If not provided, uses the Cloudinary Media Upload app.
- SHUTTERSTOCK: Upload an image from a Shutterstock account. Adds the Shutterstock source option.
- GETTY IMAGES: Upload an image from a Getty Images account. Adds the gettyimages source option.
- ISTOCK: Upload an image from an iStock account. Adds the iStock source option.
- UNSPLASH: Upload an image from Unsplash. Adds the Unsplash source option.
- GOOGLE DRIVE: Upload a file from a Google Drive account. Adds the Google Drive source option.
- GOOGLE DRIVE CLIENT ID: The Client ID of your own Google Drive application for accessing your users' Google Drive accounts. If not provided, uses the Cloudinary Google Drive app.
- SHOW SKIP CROP BUTTON: Whether to display the 'skip' button on the interactive cropping step, making the step mandatory if set to false.  Relevant only if the cropping feature is enabled.

7) Integrate the logic into your application using the following EVENTS, STATES and ACTIONS:

EVENTS:
- ALL FILES UPLOADED: Event which is triggered when all files have been processed.
- ERROR: Event triggered upon error.

EXPOSED STATES:
- UPLOADED FILES: List of Uploaded FIles' metadata
- ERROR MESSAGE: Populated upon ERROR event

ELEMENT ACTIONS - TRIGGERED IN WORKFLOW:
- OPEN: Open the Cloudinary Uploader.
- CLOSE: Close the Cloudinary Uploader
- MINIMIZE: Minimize the Cloudinary Uploader


2️⃣: CLOUDINARY FILE UTILITIES (FRONT-END)
=========================================

📋 ELEMENT DESCRIPTION
--------------------------------
CLOUDINARY FILE UTILITIES (FRONT-END) provides front-end actions for Cloudinary operations via a secure signature service and exposes SUCCESS/ERROR events and states for results and error messages.

🔧 STEP-BY-STEP SETUP
--------------------------------
0) If not already done, perform steps 0–2 from the CLOUDINARY UPLOADER WIDGET setup and ensure plugin settings include CLOUDINARY CLOUD NAME, CLOUDINARY API KEY, PUBLIC ACCESS KEY (generated from plugins.wiseable.io).

1) Add the CLOUDINARY FILE UTILITIES element to the page.

2) Integrate the logic into your application using the following CLOUDINARY FILE UTILITIES, states and actions:

EVENTS:
- SUCCESS: Event triggered upon success.
- ERROR: Event triggered upon error.

EXPOSED STATES:
- RESULTS: Populated upon SUCCESS event
- ERROR MESSAGE: Populated upon ERROR event

ELEMENT ACTIONS - TRIGGERED IN WORKFLOW:
- GENERATE PRESIGNED DOWNLOAD LINK: GENERATE DOWNLOAD PRESIGNED EXPIRING URL generates an URL allowing access to the specified object, expiring after the specified duration.

ACTION INPUT FIELDS:
- PUBLIC ID: PUBLIC ID of the file to generate the download file. The PUBLIC ID may be read from CLOUDINARY UPLOADER WIDGET UPLOADED FILES state.
- FORMAT: FORMAT of the file to generate the download file. The FORMAT may be read from CLOUDINARY UPLOADER WIDGET UPLOADED FILES state.
- RESOURCE TYPE: RESOURCE TYPE of the file to generate the download file. The RESOURCE TYPE may be read from CLOUDINARY UPLOADER WIDGET UPLOADED FILES state.
- EXPIRE AFTER (S): The number of seconds before the presigned URL expires. Defaults to 10 seconds.

ACTION OUTPUT:
- RESULTS: Populated upon SUCCESS event. Returns the operation results.

🔍 IMPLEMENTATION EXAMPLE
======================
Feel free to browse the app editor in the Service URL for an implementation example.

⚠️ TROUBLESHOOTING
================
Any plugin related error will be posted to the the Logs tab, "Server logs" section of your App Editor.
Make sure that "Plugin server side output" and "Plugin server side output" is selected in "Show Advanced".

> Server Logs Details: https://manual.bubble.io/core-resources/bubbles-interface/logs-tab#server-logs

Types

This plugin can be found under the following types:
Api   •   Background Services   •   Element   •   Event   •   Action

Categories

This plugin can be found under the following categories:
Technical   •   Media   •   Web Scraping   •   Video   •   Image   •   Input Forms   •   Visual Elements

Resources

Support contact
Documentation
Tutorial

Rating and reviews

Average rating (4.8)

Great support !
July 19th, 2024
The support team is fast to help me solve my issue. Great job ! Now I am asking if it is possible to add in delete feature, so I can remove an asset that I have uploaded. Looking forward.
Thanks for reaching out. It would be helpful to have more information on your configuration for us to troubleshoot the issue you have. On a side note, we would like to mention that the reviews section of this page is not a support channel and aims at sharing public reviews of the plugin quality and its support performance, which unfortunately we did not have a chance to address through our [email protected] channel prior to this review. (plugin author)
July 18th, 2024
  •  
wise:able
2 Major Issues
August 2nd, 2023
Overall, the plugin works well. However, the two things that need to be fixed. First, the ability to tag the files that are being uploaded into cloudinary. Second, the files automatically immediately upload to cloudinary when the user adds them into the widget. Not when the User clicks DONE. This makes it impossible to create working workflows for single file uploads.
Not possible to reset uploaded files in the widget?
February 27th, 2023
Hi, Unfortunately the upload widget does not seem to reset once the files have been uploaded. Is it possible to fix this? Currently all old files are still attached the widget unless you completely reload the page. Any help on how to fix this would be greatly appreciated! Best wishes, Tom
Hey Tom, Thanks for your message. This public review section is meant to provide a feedback on the existing plugin features and support quality. As such, the element does not support reset action, which is therefore not a feature defect, and would appreciate to have a chance to find a solution prior to this review. As per the plugin instructions, can you please contact us at [email protected], so we can better assist you? (plugin author)
February 27th, 2023
  •  
wise:able
Thank you for the quick response! I've sent an email as well to [email protected] but wasn't sure what the quickest way was to reach you so I also posted this review. Of course I understand, happy to change or delete the review.
February 27th, 2023
  •  
Original reviewer
Great plugin!
October 28th, 2022
Was looking for this and it works great. I had a question about it and their support answered the same day.
Bubble