File upload and on-the-fly processing for Elixir
Artifact is under active development, join the fun!
Add artifact to your list of dependencies in mix.exs:
def deps do
[{:artifact, "~> 0.4"}]
endNext, add :artifact to your list of applications:
def application do
[applications: [:artifact]]
endSince artifact relies on external processes for transformations, it is recommended that you install the goon middleware. To install, download the package for your system and unzip the contents somewhere in your $PATH:
$ sudo tar zxf goon_darwin_amd64.tar.gz -C /usr/local/bin/By default artifact uses the imagemagick software which is available via your os package manager, homebrew or from http://www.imagemagick.org/.
-
Define a module and
useArtifact:defmodule ExampleUploader do use Artifact, otp_app: :my_app end
-
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
-
Update your router to include the generated plug:
forward "/images", ExampleUploader.Endpoint
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: 1iex> {: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"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="">The value of user.avatar can be both a filename or a subpath from web/static/assets/images/.
Artifact source code is released under Apache 2.0 License.
See LICENSE for more information.
