View Source Tempel (Tempel v0.1.1)

This module is used to manage file attachments. It accept a single or list of file formatted to match file format of Plug.Upload

%{
  filename :: binary(),
  path :: Path.t,
  content_type: binary()
}

Get Started

define your own file uploader

defmodule MyUploader do
  use Temple.Gate

  # define service that will be used to handle file persistence and file variants
  service(persistence: Tempel.Local, variant: Tempel.Variant)

  def init(opts) do
    # add important configuration here such as storage key and cridentials
    %{}
  end

  # Define file pipeline

  # This pipeline will only save the main image, no other variants will be saved
  pipeline(:product)

  # Define file pipeline with other variants

  pipeline(:avatar, %{
    filename: fn name, setting ->
      user_id = Map.get(setting, :user_id)
      "main" <> "-" <> user_id <> "-" <> name
    end,
    variants: %{
      thumbnail: [
        operation: :thumbnail,
        resize_options: [size: "300x400", options: [fit: :cover]],
        write_options: [path: :memory, options: [suffix: ".jpeg"]]
      ]
    }
  })
end

To call this uploader in you uploading process

  # file from `Plug.Upload`

  MyUploader.save(:avatar, file)
  # => {:ok, %{"main" => object_key, "thumbnail" => object_key}}

  Myuploader.save(:product, file)
  # => {:ok, %{"main" => object_key}}