From a9bc2cb5f71f489c13631bbba6f4a6d5d9ed0025 Mon Sep 17 00:00:00 2001 From: Felipe Renan Date: Wed, 28 Jul 2021 15:39:14 +0300 Subject: [PATCH] Add support for uploading base64 images --- lib/cloudex.ex | 6 +++++- lib/cloudex/cloudinary_api.ex | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/cloudex.ex b/lib/cloudex.ex index 3f03344..e0c099c 100644 --- a/lib/cloudex.ex +++ b/lib/cloudex.ex @@ -71,7 +71,11 @@ defmodule Cloudex do defp sanitize_list([item | tail], sanitized_list) do result = - if Regex.match?(~r/^(http|s3)/, item), do: {:ok, item}, else: handle_file_or_directory(item) + if Regex.match?(~r/^(http|s3)|(base64)/, item) do + {:ok, item} + else + handle_file_or_directory(item) + end new_list = [result | sanitized_list] sanitize_list(tail, new_list) diff --git a/lib/cloudex/cloudinary_api.ex b/lib/cloudex/cloudinary_api.ex index eb55962..54ab2cb 100644 --- a/lib/cloudex/cloudinary_api.ex +++ b/lib/cloudex/cloudinary_api.ex @@ -84,7 +84,7 @@ defmodule Cloudex.CloudinaryApi do end @spec upload_file(String.t(), map) :: {:ok, %Cloudex.UploadedImage{}} | {:error, any} - defp upload_file(file_path, opts) do + defp upload_file(file, opts) do options = opts |> extract_cloudinary_opts @@ -93,9 +93,11 @@ defmodule Cloudex.CloudinaryApi do |> unify |> Map.to_list() - body = {:multipart, [{:file, file_path} | options]} + body_type = if Regex.match?(~r/base64/, file), do: :form, else: :multipart - post(body, file_path, opts) + body = {body_type, [{:file, file} | options]} + + post(body, file, opts) end @spec extract_cloudinary_opts(map) :: map