Artifact
File upload and on-the-fly processing for Elixir
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"}]
endSetup in 1-2-3
Define a module and
useArtifact:defmodule ExampleUploader do use Artifact, otp_app: :my_app endAdd 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) endUpdate 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: 1Use
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
endNow 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.