Current section
Files
Jump to
Current section
Files
lib/upload.ex
defmodule Uploadex.Upload do
@moduledoc """
Ecto type that handles upload
"""
@behaviour Ecto.Type
alias Uploadex.FileProcessing
def type, do: :string
def cast(%{filename: filename, path: path}) do
{:ok, %{
filename: generate_filename(filename),
path: path
}}
end
def cast(%{filename: filename, binary: binary}) do
case FileProcessing.process_base64(binary) do
{:ok, binary} ->
{:ok, %{
filename: generate_filename(filename),
binary: binary
}}
error ->
error
end
end
def cast(filename) when is_binary(filename), do: {:ok, filename}
def cast(_), do: :error
defp generate_filename(filename), do: "#{Ecto.UUID.generate()}-#{filename}"
def load(filename) when is_binary(filename), do: {:ok, filename}
def load(_), do: :error
def dump(%{filename: filename}), do: {:ok, filename}
def dump(filename) when is_binary(filename), do: {:ok, filename}
def dump(_), do: :error
end