defmodule MobilizonWeb.Uploaders.Category do use Arc.Definition use Arc.Ecto.Definition # To add a thumbnail version: @versions [:original, :thumb] @extension_whitelist ~w(.jpg .jpeg .gif .png) # Override the bucket on a per definition basis: # def bucket do # :custom_bucket_name # end # Whitelist file extensions: def validate({file, _}) do file_extension = file.file_name |> Path.extname() |> String.downcase() Enum.member?(@extension_whitelist, file_extension) end # Define a thumbnail transformation: def transform(:thumb, _) do {:convert, "-strip -thumbnail 250x250^ -gravity center -extent 250x250 -format png", :png} end # Override the persisted filenames: def filename(version, {file, %{title: title}}) do "#{title}_#{version}" end # TODO : When we're sure creating a category is secured and made possible only for admins, use category name # Override the storage directory: def storage_dir(_, _) do "uploads/categories/" 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 # Specify custom headers for s3 objects # Available options are [:cache_control, :content_disposition, # :content_encoding, :content_length, :content_type, # :expect, :expires, :storage_class, :website_redirect_location] # # def s3_object_headers(version, {file, scope}) do # [content_type: MIME.from_path(file.file_name)] # end end