robert

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

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. :slight_smile:

robert

robert

thank you, I’ll try to use your tips to start with :slight_smile:

Where Next?

Popular in Questions Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
shijith.k
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
siddhant3030
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
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 54006 488
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 54921 245
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New

We're in Beta

About us Mission Statement