Upload images, videos and other media files from a browser, mobile app or any application back-end without having to build and maintain infrastructure. Cloudinary offers a comprehensive upload API, an interactive UI for manual uploads and a customizable upload widget that can be embedded in any application.

Upload options
Direct upload from any browser or application

Enable your users to upload images and videos directly from any browser or application to the cloud, without any server-side involvement, ensuring faster uploads and a better experience.

Upload widget
Customizable upload widget

Easily embed an interactive upload widget to your website or application and enable users to upload resources from any location.

The widget supports interactive cropping, upload progress indication and thumbnail preview and can be configured to suit your requirements.

Upload from the application back-end

Perform server-side uploads using the upload API or via client libraries (SDKs) that simplify integration into your web and mobile apps.

Auto-fetch from remote locations

Fetch resources from remote locations and add them to any desired folder in the media library.

Drag and drop resources into your media library

Use an interactive web interface to add images and videos from a local source or a remote location to your media library.

The media library allows you to manipulate and organize your resources into folders and subfolders.

Video conversion, resizing and manipulation

Advanced Features for Better Control

Progress bar
Progress bar

Display the upload progress to keep your users informed.

Upload Preview
Upload preview

Display a preview of the uploaded resource for user review.

Multi-File Uploads
Multi-file upload

Simultaneously upload multiple files, of any type and size in any format, using a single line of code.

Upload Presets
Upload presets

Centrally define a set of default actions for every file upload to better manage user-generated content.

Manipulate During Upload
Multi-file upload

Create multiple variants of the uploaded resource or transform the original resource during upload. Learn more

Error Monitoring
Upload presets

In case of upload errors, get information on what went wrong and display a custom message.

Semantic Data Extraction
Semantic data extraction

Extract and store information such as height and width, number of bytes, format, embedded metadata and more.

Backup and Revisions
Backup and revisions

Automatically back up resources to a secure location and/or keep multiple copies for flexibility.

Access Control
Access Control

Control the access to original and transformed resources and prevent unauthorized manipulations.

Upload Notifications
Upload Notifications

Notify your users synchronously, after processing the upload and transformations or asynchronously, if required.

Integrate with Your Development Framework

Cloudinary’s client-side integration libraries and SDKs simplify the integration with your development platform of choice.

Cloudinary::Uploader.upload("sheep.jpg",
                            :width => 800, :height => 600, :crop => :limit)
\Cloudinary\Uploader::upload("sheep.jpg",
                      array("width" => 800, "height" => 600, "crop" => "limit"));
cloudinary.uploader.upload("sheep.jpg", function(result) { console.log(result) },
                           { width: 800, height: 600, crop: "limit" });
cloudinary.uploader.upload('sheep.jpg',
                            width = 800, height = 600, crop = 'limit')
<input name="file" type="file"
   class="file-upload" data-cloudinary-field="image_id"
   data-form-data="{ 'transformation': 'c_limit,h_800,w_600', ... }"/>

$(".file-upload").cloudinary_fileupload();
$upload.upload({file: file,
                data: {upload_preset: $.cloudinary.config().upload_preset},
                ... });
cloudinary.uploader().upload("sheep.jpg",
     ObjectUtils.asMap("transformation",
                      new Transformation().width(800).height(600).crop("limit")));
cloudinary.Upload(new ImageUploadParams() {
  File = new FileDescription(@"sheep.jpg"),
  Transformation = new Transformation().Crop("limit").Width(800).Height(300)
});
cloudinary.uploader.upload("sheep.jpg", 
  UploadParameters().transformation(Transformation().w_(100).h_(130).c_("fill")))
CLUploader* uploader = [[CLUploader alloc] init:cloudinary delegate:self];
NSData *imageData = [NSData dataWithContentsOfFile:@"sheep.jpg"];

CLTransformation *transformation = [CLTransformation transformation];
[transformation setParams: @{@"width": @800, @"height": @600, @"crop": @"limit"}];

[uploader upload:imageData options:@{@"transformation": transformation}];
cloudinary.uploader().upload("sheep.jpg",
     ObjectUtils.asMap("transformation", 
                      new Transformation().width(800).height(600).crop("limit")));