Artifact

File upload and on-the-fly processing for Elixir

Build Status][travis-img]][travis] [![Hex Version][hex-img] [ License

Artifact is under active development, join the fun!

Installation

Add artifact to your list of dependencies in mix.exs:

def deps do
  [{:artifact, "~> 0.3.0"}]
end

Setup in 1-2-3

  1. Define a module and use Artifact:

     defmodule ExampleUploader do
       use Artifact, otp_app: :my_app
     end
  2. Add the supervisor to your supervisor tree:

     def start(_type, _args) do
       import Supervisor.Spec, warn: false
    
       children = [
          supervisor(ExampleUploader.Supervisor, [])
       ]
    
       opts = [strategy: :one_for_one, name: MyApp.Supervisor]
      Supervisor.start_link(children, opts)
    end
  3. Update your router to include the generated plug:

     forward "/images", ExampleUploader.Endpoint

Configuration

config :my_app, ExampleUploader,
  asset_host: "http://www.example.com/images",
  asset_url: "/:format/:name",
  default: "placeholder.png",
  formats: %{
    thumb: "convert -'[0]' -resize 50x50 -gravity center +repage -strip jpg:-"
  }

config :my_app, ExampleUploader.Storage,
  type: Artifact.Storage.Local,
  storage_dir: Path.expand("../web/static/assets/images", __DIR__)

config :my_app, ExampleUploader.Pool,
  pool_size: 1

Use

iex> {:ok, name} = ExampleUploader.put(data, name: "profile.png")
iex> name
"profile.png"
iex> {:ok, url} = ExampleUploader.URLHelpers.url(name, :thumb)
"http://www.example.com/images/thumb/profile.png"

Phoenix Integration

Using Aritfact with Phoenix? It may be helpful to update your web/web.ex to alias or import the uploader’s url helpers:

def view do
  quote do
    use Phoenix.View, root: "web/templates"

    import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1]

    use Phoenix.HTML

    # We'll use an alias with a shorter name
    alias ExampleUploader.URLHelpers, as: Images

    import BevReviews.Router.Helpers
    import BevReviews.ErrorHelpers
    import BevReviews.Gettext
  end
end

Now we can generate URLs in our markup:

<img class="img-responsive img-thumb" src="<%= Images.url(user.avatar, :thumb) %>" alt="">

License

Artifact source code is released under Apache 2.0 License.

See LICENSE for more information.