README.md


# CloudinaryUploader

CloudinaryUploader is an Elixir library that can upload image, audio and video urls to Cloudinary.

## Installation

The package can be installed by adding `cloudinary_uploader` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:cloudinary_uploader, "~> 0.1.0"}
  ]
end
```
Then, update your dependencies:

```sh-session
$ mix deps.get
```

## Configaration

To use CloudinaryUploader you have to configure `API_KEY` `API_SECRET` and  `CLOUD_NAME` in your `config.exs`. You can find account-specific configuration credentials in the dashboard of our Cloudinary Management Console.

```elixir
config :cloudinary_uploader,
  api_key: "my_api_key",
  api_secret: "my_api_secret",
  cloud_name: "my_cloud_name"
```

## Usage

### Image Upload

The `upload` method uploads an image to the cloud. `upload!` also uploads a image to cloudinary but raises an exception on error.

```elixir
iex> CloudinaryUploader.upload("https://www.gstatic.com/webp/gallery/1.jpg")
{:ok,
 %CloudinaryUploader.Response{audio: nil, bit_rate: nil, bytes: 44891,
  created_at: "2019-02-11T10:47:27Z", duration: nil,
  etag: "d4a63031f57bdcafb86ca02100fdd6d2", format: "jpg", frame_rate: nil,
  height: 368, is_audio: nil, original_filename: "1", pages: nil,
  placeholder: false, public_id: "bg871jkepmqgu7wka2zy", resource_type: "image",
  rotation: nil,
  secure_url: "https://res.cloudinary.com/cloudname/image/upload/v1549882047/bg871jkepmqgu7wka2zy.jpg",
  signature: "924a2e045f2266fdd3d65b4f20be324a18f7c0a9", tags: [],
  type: "upload",
  url: "http://res.cloudinary.com/cloudname/image/upload/v1549882047/bg871jkepmqgu7wka2zy.jpg",
  version: 1549882047, video: nil, width: 550}}

```

### Audio and Video Upload

Audio and Video files can be uploaded with the same `upload` function by sending resource_type as video in the parameters. If resource_type is not specified image resource_type will be taken as default.

```elixir
iex> CloudinaryUploader.upload("https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4", resource_type: :video)
{:ok,
 %CloudinaryUploader.Response{audio: %{"bit_rate" => "384828",
    "channel_layout" => "5.1", "channels" => 6, "codec" => "aac",
    "frequency" => 48000}, bit_rate: 1589963, bytes: 1055736,
  created_at: "2019-02-11T10:53:55Z", duration: 5.312,
  etag: "d55bddf8d62910879ed9f605522149a8", format: "mp4", frame_rate: 25.0,
  height: 720, is_audio: false, original_filename: "big_buck_bunny_720p_1mb",
  pages: 0, placeholder: false, public_id: "oevkmoic6js7fjgupfai",
  resource_type: "video", rotation: 0,
  secure_url: "https://res.cloudinary.com/cloudname/video/upload/v1549882435/oevkmoic6js7fjgupfai.mp4",
  signature: "97b2ec29b03a47325d48d4e772e790dfba688511", tags: [],
  type: "upload",
  url: "http://res.cloudinary.com/cloudname/video/upload/v1549882435/oevkmoic6js7fjgupfai.mp4",
  version: 1549882435,
  video: %{"bit_rate" => "1205959", "codec" => "h264", "dar" => "16:9",
    "level" => 31, "pix_format" => "yuv420p", "profile" => "Main"},
  width: 1280}}
```

### Upload files with `public_id`

An additional parameter `public_id`(String) should be sent for customised accessibility of the uploaded asset. If `public_id` was not set, Cloudinary generates a random `public_id`.
Although the public_id parameter can be specified, the overwrite parameter is always set to 'false' for unsigned uploads to prevent overwriting existing files.


```elixir
iex> CloudinaryUploader.upload("https://www.gstatic.com/webp/gallery/1.jpg", public_id: "specific_folder/file_name")
{:ok,
 %CloudinaryUploader.Response{audio: nil, bit_rate: nil, bytes: 44891,
  created_at: "2019-02-11T11:08:11Z", duration: nil,
  etag: "d4a63031f57bdcafb86ca02100fdd6d2", format: "jpg", frame_rate: nil,
  height: 368, is_audio: nil, original_filename: "1", pages: nil,
  placeholder: false, public_id: "specific_folder/file_name",
  resource_type: "image", rotation: nil,
  secure_url: "https://res.cloudinary.com/cloudname/image/upload/v1549883291/specific_folder/file_name.jpg",
  signature: "d4ecfdc70fb50dd4ea6c33f7845cc11c2f3954f2", tags: [],
  type: "upload",
  url: "http://res.cloudinary.com/cloudname/image/upload/v1549883291/specific_folder/file_name.jpg",
  version: 1549883291, video: nil, width: 550}}
```
## Documentation

Documentation be found at [https://hexdocs.pm/cloudinary_uploader](https://hexdocs.pm/cloudinary_uploader).

## License
Released under the MIT license.