Hi,
I’m trying to use arc to upload to s3, but facing some issues in the road.
Here what happens, if I upload {jpg, png, etc…} I want arc to run some transform on it before saving.
However that’s not the case for a pdf file. Could someone give me some direction?
My goal is to put both validate in a single file
arc: 0.11.0
arc_ecto: 0.11.1
phoenix: 1.4.0
Here is the code:
defmodule Cidades.AnexoUploader do
use Arc.Definition
use Arc.Ecto.Definition
@versions [:original, :thumb, :mini_thumb]
@extension_whitelist ~w(.jpg .jpeg .gif .png .pdf)
#def acl(:thumb, _), do: :public_read
@acl :public_read
def validate({file, _}) do
file_extension = file.file_name |> Path.extname |> String.downcase
Enum.member?(@extension_whitelist, file_extension)
cond do
not (~w(.pdf) |> Enum.member?(Path.extname(file.file_name))) -> transform(:thumb, {file})
(~w(.pdf) |> Enum.member?(Path.extname(file.file_name))) -> {:ok}
end
end
def transform(:thumb, {file, _scope}) do
{:convert, "-strip -thumbnail x500^ -gravity center -extent x500 -format jpg", :jpg}
end
def transform(:mini_thumb, {file, _scope}) do
{:convert, "-strip -thumbnail 200x200^ -gravity center -extent 200x200 -format jpg", :jpg}
end
def filename(version, {_file, _scope}) do
#file_name = Path.basename(file.file_name, Path.extname(file.file_name))
#"#{version}_#{:os.system_time}"
#"#{scope.uuid}_#{version}_#{file_name}"
"#{version}"
end
# Override the storage directory:
def storage_dir(_version, {_file, scope}) do
IO.inspect(scope)
"uploads/#{scope.uuid}"
#"#{String.downcase(scope.tipo)}/#{scope.mun.cnpj}/#{scope.uuid}"
end
# def __storage do
# case Mix.env do
# :dev -> Arc.Storage.Local
# :test -> Arc.Storage.Local
# _ -> Arc.Storage.S3
# end
#delete all versions of an avatar
#def remove(scope) do
# storage_dir(nil, {scope.avatar, scope}) |> File.rm_rf!
#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
How can I solve this?
Newcomer to forum, sorry for any miss…
#arc, #arc_ecto