2023-03-23 08:17:47 +01:00
|
|
|
defmodule ChiyaWeb.Uploaders.UserImage do
|
2023-03-06 23:15:23 +01:00
|
|
|
use Waffle.Definition
|
|
|
|
use Waffle.Ecto.Definition
|
|
|
|
|
|
|
|
# Include ecto support (requires package waffle_ecto installed):
|
|
|
|
# use Waffle.Ecto.Definition
|
|
|
|
|
2023-03-07 18:59:49 +01:00
|
|
|
@versions [:original, :thumb, :thumb_dithered]
|
2023-03-06 23:15:23 +01:00
|
|
|
|
|
|
|
# Whitelist file extensions:
|
2023-03-09 07:27:39 +01:00
|
|
|
def validate({_file, _}) do
|
|
|
|
# _file_extension = file.file_name |> Path.extname() |> String.downcase()
|
2023-03-06 23:15:23 +01:00
|
|
|
# case Enum.member?(~w(.jpg .jpeg .gif .png), file_extension) do
|
|
|
|
# true -> :ok
|
|
|
|
# false -> {:error, "invalid file type"}
|
|
|
|
# end
|
|
|
|
|
|
|
|
# filetype will be validated in liveview
|
|
|
|
:ok
|
|
|
|
end
|
|
|
|
|
|
|
|
# Define a thumbnail transformation:
|
|
|
|
def transform(:thumb, _) do
|
|
|
|
{:convert, "-strip -thumbnail 250x250^ -gravity center -extent 250x250 -format png", :png}
|
|
|
|
end
|
|
|
|
|
|
|
|
# Define a thumbnail transformation with dithering:
|
|
|
|
def transform(:thumb_dithered, _) do
|
|
|
|
{:convert,
|
|
|
|
"-strip -thumbnail 250x250^ -gravity center -extent 250x250 -colors 24 -dither FloydSteinberg -format png",
|
|
|
|
:png}
|
|
|
|
end
|
|
|
|
|
|
|
|
# Override the persisted filenames:
|
|
|
|
def filename(version, _) do
|
|
|
|
version
|
|
|
|
end
|
|
|
|
|
|
|
|
# Override the storage directory:
|
|
|
|
def storage_dir(_version, {_file, _scope}) do
|
|
|
|
"uploads/user/avatar"
|
|
|
|
end
|
|
|
|
|
|
|
|
# Provide a default URL if there hasn't been a file uploaded
|
|
|
|
# def default_url(version, scope) do
|
|
|
|
# "/images/avatars/default_#{version}.png"
|
|
|
|
# end
|
|
|
|
end
|