robert
Upload pdf and images using Arc
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
Most Liked
OvermindDL1
First this isn’t doing anything, I think you want to return if it fails or something?
Second, you seem to be calling transform from your validate function, this check should probably belong in the transform functions themselves?
Third, no need to duplicate the test:
cond do
not (~w(.pdf) |> Enum.member?(Path.extname(file.file_name))) -> {:convert, "blah"}
true -> :whatever_it_was_to_ignore
end
Etc to start with. ![]()
1
robert
Popular in Questions
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
What is the proper way to load a module from a file in to IEX?
In the python world, doing something like this pretty standard:
from ....
New
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible.
total = 10
while total != 0
...
New
Hey,
Just curious what are the main benefits of Elixir compared to Clojure?
When is Elixir more useful than Clojure and vice versa?
Th...
New
Hi,
I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
i’m a new one to elixir
which editor can i use
vs code? or atom?
Thanks! :smiley:
New
After calling mix ecto.create I get this error:
17:00:32.162 [error] GenServer #PID<0.412.0> terminating
** (Postgrex.Error) FATAL...
New
Other popular topics
Lets say I have map like this fetching from my database
%{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
Hi everyone!
I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
What learn first? Rust or Elixir
Hi Elixir community!
I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
i’m a new one to elixir
which editor can i use
vs code? or atom?
Thanks! :smiley:
New
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









