---
description: Unofficial Capacitor plugin for Cloudinary SDK to upload files directly from the filesystem to Cloudinary.
title: Capacitor Cloudinary Plugin for Android, iOS & Web - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/cloudinary.png
---

<!doctype html> 

[Skip to content ](#capacitor-cloudinary-plugin) 

[🖥️ Introducing the **Capacitor Electron Platform** — build desktop apps for macOS, Windows, and Linux. Free & open source. ](/blog/announcing-the-capacitor-electron-platform/) 

* [ SDKs ](/docs/sdks/)
* [ Configuration ](#configuration)
* [ Demo ](#demo)
* [ Usage ](#usage)
* [ API ](#api)
* [ Enums ](#enums)
* [ Utils ](#utils)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ Credits ](#credits)
* [ Compass ](/docs/sdks/capacitor/compass/)
* [ Contacts ](/docs/sdks/capacitor/contacts/)
* [ Crisp ](/docs/sdks/capacitor/crisp/)
* [ Datetime Picker ](/docs/sdks/capacitor/datetime-picker/)
* [ Device Info ](/docs/sdks/capacitor/device-info/)
* [ Dialog ](/docs/sdks/capacitor/dialog/)
* [ Electron ](/docs/sdks/capacitor/electron/)
* [ Exif ](/docs/sdks/capacitor/exif/)
* [ Facebook Sign-In ](/docs/sdks/capacitor/facebook-sign-in/)
* [ File Compressor ](/docs/sdks/capacitor/file-compressor/)
* [ File Opener ](/docs/sdks/capacitor/file-opener/)
* [ File Picker ](/docs/sdks/capacitor/file-picker/)
* [ Firebase ](/docs/sdks/capacitor/firebase/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Configuration ](#configuration)
* [ Demo ](#demo)
* [ Usage ](#usage)
* [ API ](#api)
* [ Enums ](#enums)
* [ Utils ](#utils)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ Credits ](#credits)

# Capacitor Cloudinary Plugin[¶](#capacitor-cloudinary-plugin "Permanent link")

Unofficial Capacitor plugin for [Cloudinary SDK](https://cloudinary.com/documentation/cloudinary%5Fsdks).[1](#fn:1)

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

Capacitor Cloudinary allows you to use the native Cloudinary SDKs to upload files directly from the filesystem without going through the WebView.

* 🔋 Supports Android, iOS and the Web
* 🍕 Chunk upload of large files
* ❌ No more out-of-memory issues
* 📁 Works with the [Capacitor Filesystem](https://capacitorjs.com/docs/apis/filesystem) and [Capacitor File Picker](https://github.com/capawesome-team/capacitor-file-picker)
* 🤝 **Compatibility**: Works alongside the [File Compressor](https://capawesome.io/docs/sdks/capacitor/file-compressor/), [File Opener](https://capawesome.io/docs/sdks/capacitor/file-opener/) and [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/) plugins.

## Use Cases[¶](#use-cases "Permanent link")

The Cloudinary plugin is typically used whenever an app needs to exchange media files with Cloudinary, for example:

* **User-generated content**: Upload photos and videos that users select from their device directly to your Cloudinary account.
* **Large video uploads**: Upload large files in chunks via the native Cloudinary SDKs to avoid out-of-memory crashes in the WebView.
* **Profile pictures**: Upload an image with a unique public identifier so it can be referenced and replaced later.
* **Media downloads**: Download images, videos, or raw files from Cloudinary to the device for further processing.

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 8.x.x          | \>=8.x.x          | Active support |
| 7.x.x          | 7.x.x             | Deprecated     |
| 6.x.x          | 6.x.x             | Deprecated     |
| 5.x.x          | 5.x.x             | Deprecated     |

## Installation[¶](#installation "Permanent link")

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-cloudinary` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-2-1)npm install @capawesome/capacitor-cloudinary
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

### Android[¶](#android "Permanent link")

This API requires the following permission be added to your `AndroidManifest.xml` **before** the `application` tag:

`[](#%5F%5Fcodelineno-3-1)<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
`

You also need to add the following receiver **inside** the `application` tag in your `AndroidManifest.xml`:

`[](#%5F%5Fcodelineno-4-1)<receiver android:name="io.capawesome.capacitorjs.plugins.cloudinary.DownloadBroadcastReceiver" android:exported="true">
[](#%5F%5Fcodelineno-4-2)  <intent-filter>
[](#%5F%5Fcodelineno-4-3)    <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
[](#%5F%5Fcodelineno-4-4)  </intent-filter>
[](#%5F%5Fcodelineno-4-5)</receiver>
`

#### Variables[¶](#variables "Permanent link")

If needed, you can define the following project variable in your app’s `variables.gradle` file to change the default version of the dependency:

* `$cloudinaryAndroidVersion` version of `com.cloudinary:cloudinary-android` (default: `3.1.2`)

This can be useful if you encounter dependency conflicts with other plugins in your project.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Demo[¶](#demo "Permanent link")

A working example can be found here: [robingenz/capacitor-plugin-demo](https://github.com/robingenz/capacitor-plugin-demo)

## Usage[¶](#usage "Permanent link")

The following examples show how to initialize the plugin, upload a file to Cloudinary, and download a file from Cloudinary.

### Initialize the plugin[¶](#initialize-the-plugin "Permanent link")

Initialize the plugin with the cloud name of your app, which you can find in the Cloudinary Management Console. This method must be called once before all other methods:

`[](#%5F%5Fcodelineno-5-1)import { Cloudinary } from '@capawesome/capacitor-cloudinary';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const initialize = async () => {
[](#%5F%5Fcodelineno-5-4)  await Cloudinary.initialize({ cloudName: 'my_cloud_name' });
[](#%5F%5Fcodelineno-5-5)};
`

### Upload a file to Cloudinary[¶](#upload-a-file-to-cloudinary "Permanent link")

Upload an image, video, or raw file to Cloudinary. On Android and iOS, pass the path of the file to upload; on the Web, pass a `Blob` instead. Note that currently only unsigned uploads are supported, so you need an upload preset:

`[](#%5F%5Fcodelineno-6-1)import { Cloudinary, ResourceType } from '@capawesome/capacitor-cloudinary';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)const uploadResource = async () => {
[](#%5F%5Fcodelineno-6-4)  await Cloudinary.uploadResource({
[](#%5F%5Fcodelineno-6-5)    path: 'file:///var/mobile/Containers/Data/Application/22A433FD-D82D-4989-8BE6-9FC49DEA20BB/Images/test.png',
[](#%5F%5Fcodelineno-6-6)    publicId: 'my_public_id',
[](#%5F%5Fcodelineno-6-7)    resourceType: ResourceType.image,
[](#%5F%5Fcodelineno-6-8)    uploadPreset: 'my_preset',
[](#%5F%5Fcodelineno-6-9)  });
[](#%5F%5Fcodelineno-6-10)};
`

### Download a file from Cloudinary[¶](#download-a-file-from-cloudinary "Permanent link")

Download a resource by its URL. On Android and iOS, the result contains the path where the file was stored on the device; on the Web, it contains a `Blob`:

`[](#%5F%5Fcodelineno-7-1)import { Cloudinary } from '@capawesome/capacitor-cloudinary';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const downloadResource = async () => {
[](#%5F%5Fcodelineno-7-4)  const { path } = await Cloudinary.downloadResource({
[](#%5F%5Fcodelineno-7-5)    url: 'https://res.cloudinary.com/myCloudName/image/upload/v123/123.png',
[](#%5F%5Fcodelineno-7-6)  });
[](#%5F%5Fcodelineno-7-7)  return path;
[](#%5F%5Fcodelineno-7-8)};
`

## API[¶](#api "Permanent link")

* [initialize(...)](#initialize)
* [uploadResource(...)](#uploadresource)
* [downloadResource(...)](#downloadresource)
* [Interfaces](#interfaces)
* [Enums](#enums)

### initialize(...)[¶](#initialize "Permanent link")

`[](#%5F%5Fcodelineno-8-1)initialize(options: InitializeOptions) => Promise<void>
`

Initialize the plugin.

This method must be called once before all other methods.

| Param       | Type                                    |
| ----------- | --------------------------------------- |
| **options** | [InitializeOptions](#initializeoptions) |

**Since:** 0.0.1

---

### uploadResource(...)[¶](#uploadresource "Permanent link")

`[](#%5F%5Fcodelineno-9-1)uploadResource(options: UploadResourceOptions) => Promise<UploadResourceResult>
`

Upload a file to Cloudinary.

**Note**: Currently, only unsigned uploads are supported.

| Param       | Type                                            |
| ----------- | ----------------------------------------------- |
| **options** | [UploadResourceOptions](#uploadresourceoptions) |

**Returns:** `Promise<[UploadResourceResult](#uploadresourceresult)>`

**Since:** 0.0.1

---

### downloadResource(...)[¶](#downloadresource "Permanent link")

`[](#%5F%5Fcodelineno-10-1)downloadResource(options: DownloadResourceOptions) => Promise<DownloadResourceResult>
`

Download a file from Cloudinary.

On **Android**, the file will be downloaded to the `Downloads` directory. On **iOS**, the file will be downloaded to the temporary directory.

It is recommended to copy the file to a permanent location for further processing after downloading.

| Param       | Type                                                |
| ----------- | --------------------------------------------------- |
| **options** | [DownloadResourceOptions](#downloadresourceoptions) |

**Returns:** `Promise<[DownloadResourceResult](#downloadresourceresult)>`

**Since:** 0.0.3

---

### Interfaces[¶](#interfaces "Permanent link")

#### InitializeOptions[¶](#initializeoptions "Permanent link")

| Prop          | Type   | Description                                                                         | Since |
| ------------- | ------ | ----------------------------------------------------------------------------------- | ----- |
| **cloudName** | string | The cloud name of your app which you can find in the Cloudinary Management Console. | 0.0.1 |

#### UploadResourceResult[¶](#uploadresourceresult "Permanent link")

| Prop                 | Type                          | Description                                                                              | Since |
| -------------------- | ----------------------------- | ---------------------------------------------------------------------------------------- | ----- |
| **assetId**          | string                        | The unique asset identifier of the uploaded resource. Only available on Android and Web. | 0.0.1 |
| **bytes**            | number                        | The number of bytes of the uploaded resource.                                            | 0.0.1 |
| **createdAt**        | string                        | The timestamp at which the resource was uploaded.                                        | 0.0.1 |
| **duration**         | number                        | The duration of the uploaded resource in seconds.                                        | 0.1.5 |
| **format**           | string                        | The format of the uploaded resource.                                                     | 0.0.1 |
| **height**           | number                        | The height of the uploaded resource.                                                     | 0.1.4 |
| **originalFilename** | string                        | The original filename of the uploaded resource. Only available on Android and iOS.       | 0.0.1 |
| **resourceType**     | [ResourceType](#resourcetype) | The resource type of the uploaded resource.                                              | 0.0.1 |
| **publicId**         | string                        | The unique public identifier of the uploaded resource.                                   | 0.0.1 |
| **url**              | string                        | The url of the uploaded resource.                                                        | 0.0.1 |
| **secureUrl**        | string                        | The secure url of the uploaded resource.                                                 | 5.1.0 |
| **width**            | number                        | The width of the uploaded resource.                                                      | 0.1.4 |

#### UploadResourceOptions[¶](#uploadresourceoptions "Permanent link")

| Prop             | Type                          | Description                                                        | Since |
| ---------------- | ----------------------------- | ------------------------------------------------------------------ | ----- |
| **resourceType** | [ResourceType](#resourcetype) | The resource type to upload.                                       | 0.0.1 |
| **blob**         | Blob                          | The file to upload. Only available on Web.                         | 0.0.1 |
| **uploadPreset** | string                        | The selected upload preset.                                        | 0.0.1 |
| **path**         | string                        | The path of the file to upload. Only available on Android and iOS. | 0.0.1 |
| **publicId**     | string                        | Assign a unique public identifier to the resource.                 | 0.0.1 |

#### DownloadResourceResult[¶](#downloadresourceresult "Permanent link")

| Prop     | Type   | Description                                                                                              | Since |
| -------- | ------ | -------------------------------------------------------------------------------------------------------- | ----- |
| **path** | string | The path of the downloaded resource where it is stored on the device. Only available on Android and iOS. | 0.0.3 |
| **blob** | Blob   | The downloaded resource as a blob. Only available on Web.                                                | 0.0.1 |

#### DownloadResourceOptions[¶](#downloadresourceoptions "Permanent link")

| Prop    | Type   | Description                          | Since |
| ------- | ------ | ------------------------------------ | ----- |
| **url** | string | The url of the resource to download. | 0.0.3 |

### Enums[¶](#enums "Permanent link")

#### ResourceType[¶](#resourcetype "Permanent link")

| Members   | Value   | Since |
| --------- | ------- | ----- |
| **Image** | 'image' | 0.0.1 |
| **Video** | 'video' | 0.0.1 |
| **Raw**   | 'raw'   | 0.0.1 |

## Utils[¶](#utils "Permanent link")

See [docs/utils/README.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/cloudinary/docs/utils/README.md).

## FAQ[¶](#faq "Permanent link")

### Do I need to call `initialize` before using the plugin?[¶](#do-i-need-to-call-initialize-before-using-the-plugin "Permanent link")

Yes, the `initialize(...)` method must be called once before all other methods. It only requires the cloud name of your app, which you can find in the Cloudinary Management Console. See the [usage example](#initialize-the-plugin) above.

### Are signed uploads supported?[¶](#are-signed-uploads-supported "Permanent link")

No, currently only unsigned uploads are supported. This means you need to create an unsigned upload preset in your Cloudinary account and pass its name via the `uploadPreset` option when calling `uploadResource(...)`.

### Where are downloaded files stored?[¶](#where-are-downloaded-files-stored "Permanent link")

On Android, the file is downloaded to the `Downloads` directory. On iOS, the file is downloaded to the temporary directory, so it is recommended to copy it to a permanent location for further processing. On the Web, the downloaded resource is returned as a `Blob` instead of a path.

### How do I upload a file on the Web?[¶](#how-do-i-upload-a-file-on-the-web "Permanent link")

On the Web, pass the file as a `Blob` via the `blob` option of `uploadResource(...)`. The `path` option is only available on Android and iOS, where it points to a file on the device's filesystem.

### What do I need to configure on Android?[¶](#what-do-i-need-to-configure-on-android "Permanent link")

You need to add the `DOWNLOAD_WITHOUT_NOTIFICATION` permission and the `DownloadBroadcastReceiver` receiver to your `AndroidManifest.xml`, as described in the [Installation](#installation) section. No additional configuration is required on iOS or the Web.

### Can I use this plugin with Ionic, React, Vue or Angular?[¶](#can-i-use-this-plugin-with-ionic-react-vue-or-angular "Permanent link")

Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.

## Related Plugins[¶](#related-plugins "Permanent link")

* [File Compressor](https://capawesome.io/docs/sdks/capacitor/file-compressor/): Compress images before uploading them.
* [File Opener](https://capawesome.io/docs/sdks/capacitor/file-opener/): Open a downloaded file with the default application.
* [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/): Let the user select a file, image, or video to upload to Cloudinary.

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/cloudinary/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/cloudinary/LICENSE).

## Credits[¶](#credits "Permanent link")

This plugin is based on the [Capacitor Cloudinary](https://github.com/capawesome-team/capacitor-cloudinary) plugin. Thanks to everyone who contributed to the project!

---

1. This project is not affiliated with, endorsed by, sponsored by, or approved by Cloudinary Ltd. or any of their affiliates or subsidiaries. [↩](#fnref:1 "Jump back to footnote 1 in the text")

July 8, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/cloudinary/#article", "headline": "Capacitor Cloudinary Plugin for Android, iOS & Web", "name": "Capacitor Cloudinary Plugin for Android, iOS & Web", "description": "Unofficial Capacitor plugin for Cloudinary SDK to upload files directly from the filesystem to Cloudinary.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/cloudinary/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/cloudinary/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/cloudinary/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/cloudinary/#software", "name": "Capacitor Cloudinary Plugin for Android, iOS & Web", "description": "Unofficial Capacitor plugin for Cloudinary SDK to upload files directly from the filesystem to Cloudinary.", "url": "https://capawesome.io/docs/sdks/capacitor/cloudinary/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Do I need to call initialize before using the plugin?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, the initialize(...) method must be called once before all other methods. It only requires the cloud name of your app, which you can find in the Cloudinary Management Console. See the usage example above."}}, {"@type": "Question", "name": "Are signed uploads supported?", "acceptedAnswer": {"@type": "Answer", "text": "No, currently only unsigned uploads are supported. This means you need to create an unsigned upload preset in your Cloudinary account and pass its name via the uploadPreset option when calling uploadResource(...)."}}, {"@type": "Question", "name": "Where are downloaded files stored?", "acceptedAnswer": {"@type": "Answer", "text": "On Android, the file is downloaded to the Downloads directory. On iOS, the file is downloaded to the temporary directory, so it is recommended to copy it to a permanent location for further processing. On the Web, the downloaded resource is returned as a Blob instead of a path."}}, {"@type": "Question", "name": "How do I upload a file on the Web?", "acceptedAnswer": {"@type": "Answer", "text": "On the Web, pass the file as a Blob via the blob option of uploadResource(...). The path option is only available on Android and iOS, where it points to a file on the device's filesystem."}}, {"@type": "Question", "name": "What do I need to configure on Android?", "acceptedAnswer": {"@type": "Answer", "text": "You need to add the DOWNLOAD_WITHOUT_NOTIFICATION permission and the DownloadBroadcastReceiver receiver to your AndroidManifest.xml, as described in the Installation section. No additional configuration is required on iOS or the Web."}}, {"@type": "Question", "name": "Can I use this plugin with Ionic, React, Vue or Angular?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects."}}], "url": "https://capawesome.io/docs/sdks/capacitor/cloudinary/"}
```
