Upload UGC
Last updated: Jul-27-2026
Upload is an essential feature of UGC: you have to provide your users a way to add their media to your site or app. In addition to storing the media in your product environment, there are many features that you can invoke while uploading, for example, limiting the size of the uploads, moderating the content that's uploaded, and analyzing the media for management purposes.
This page focuses on how upload applies to the four example use cases followed throughout this guide: profile pictures, video reviews, marketplace products, and try before you buy.
Recommended features by use case
The following table shows which features we recommend (marked ✅) for each of these use cases:
| Profile pictures | Video reviews | Marketplace products | Try before you buy | |
|---|---|---|---|---|
| Upload | ✅ | ✅ | ✅ | ✅ |
| Define upload behavior | ✅ | ✅ | ✅ | ✅ |
| Control access to uploaded media | ✅ | ✅ | ||
| Track uploads | ✅ | ✅ | ||
| Transform on upload | ✅ | ✅ | ✅ | ✅ |
| Prepare delivery transformations | ✅ | ✅ |
Ways to upload
API and SDKs
There are many ways to allow users to upload their content to your site. Using the Upload API, either directly, or via an SDK, you can tailor how images and videos are uploaded, analyzed and managed to suit your needs.
The following code shows how to:
- Upload a local image called shirt.jpg
- Request color and quality analysis
- Run the Google Auto Tagging add-on
- Automatically add the detected categories as tags to the asset
Upload widget
For a complete, interactive user interface that enables users to upload files from a variety of sources, and includes options to crop on upload and limit file types, amongst others, consider implementing the Cloudinary Upload widget.
This example of the Upload widget restricts file types to images only and displays the uploaded image following a successful upload:
Some of the community-developed libraries have a CldUploadWidget component for adding the widget to your app.
Watch a clip about the Upload widget from the Cloudinary Academy UGC workshop:
This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.
Minisite
Non-developers can create a hosted, standalone site for the Upload widget by creating a minisite. See this no-code uploads blog post to learn more.
Portals
If you're on an Enterprise plan, you can use the external uploader feature of Portals to allow third-party stakeholders to upload assets directly to your product environment using the Upload Widget, embedded within the portal.
You can configure the external uploader to:
- Automatically apply auto-tagging
- Assign an identifying tag to all assets uploaded via the portal
Media Library
For trusted content providers, there's also the option to provide them with their own Media Library user login to your product environment, where they can not only upload, but also search, view and download assets within the folders that they have permission to see.
Define upload behavior
You can use upload presets to define a set of upload options that are applied every time a user uploads content to your site. For example, you can specify that all assets are moderated on upload, or that certain transformations are applied.
Watch a clip about upload presets from the Cloudinary Academy UGC workshop:
This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.
Control access to uploaded media
By default, files uploaded to your product environment are publicly available via a URL. If you want to control who can access your assets and whether or not they can transform them, you should consider the different media access methods.
Track uploads
You can get notified when content is uploaded to your site via webhook notifications. Use these notifications to trigger further steps in your workflow automatically, or prompt subsequent interaction.
Transform on upload
You can apply transformations to images and videos as they're uploaded. These are called incoming transformations and result in the transformed assets being stored, rather than the original assets. Incoming transformations are useful to limit the size of uploaded assets, and allow you to standardize a set of transformations for your use case.
Watch a clip about incoming transformations from the Cloudinary Academy UGC workshop:
This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.
Limit dimensions of images and videos
If you know that when displaying your users' images or videos they'll never exceed certain dimensions, then you can resize the media to a defined limit on upload to save storage costs.
Truncate long videos
To prevent users from uploading overly long videos, you can set a limit and truncate anything longer than that limit.
Strip metadata
For privacy reasons, and also to reduce storage costs, it's advisable to remove metadata (IPTC, EXIF and XMP) associated with images on upload.
Prepare delivery transformations on upload (cache warm up)
It can sometimes take more than a couple of a seconds to transform an image or video on the fly for delivery, for example, when transforming long videos or using generative AI transformations. You can prepare derived (transformed) versions of an asset in advance of delivering them for the first time by using eager transformations to warm up the cache.
You can specify eager transformations in an upload preset, or use the eager parameter in the upload call:
- User-generated content: Overview and the UGC workflow diagram.
- Manage and analyze UGC: Moderate, scan for malware, analyze, transcribe, and automate workflows.
- Transform and customize UGC: Improve quality, resize, standardize, watermark, and personalize.
- Optimize and deliver UGC: Optimize on the fly and deliver videos with the Cloudinary Video Player.