Extus

TODO: Add description

Installation

If available in Hex, the package can be installed by adding extus to your list of dependencies in mix.exs:

def deps do
  [{:extus, "~> 0.1.0"}]
end

1. Config

config :extus,
  storage: ExTus.Storage.Local,
  base_dir: "upload",
  expired_after: 24 * 60 * 60 * 1000, #clean uncompleted upload after 1 day
  clean_interval: 30 * 60 * 1000 # start cleaning job after 30min

Config for S3 uploaded

config :extus,
  storage: ExTus.Storage.S3,
  base_dir: "upload",
    asset_host: "https://dsxymfc8fnnz2.cloudfront.net",

  config :extus, :s3,
    virtual_host: true,
    bucket: "mofiin",
    chunk_size: 5 * 1024 * 1024

2. Dependencies

If you use S3 to store file, add below dependencies

    {:poison, "~> 2.0"},
    {:hackney, "~> 1.6"}

3. Usage

Add new controller for upload

defmodule MyApp.UploadController do
  use MyApp.Web, :controller
  use ExTus.Controller

  # start upload file callback
  def on_begin_upload(file_info) do
    IO.inspect "create file: #{inspect file_info}"
  end
    
  # Completed upload file callback
  def on_complete_upload(file_info) do
    IO.inspect "complete file: #{inspect file_info}"
  end
end

Add route

scope "/files", MyApp do
    options "/",            TusController, :options
    options "/:file",       TusController, :options
    match :head, "/:file",  TusController, :head
    post "/",               TusController, :post
    patch "/:file",         TusController, :patch
    delete "/:file",        TusController, :delete
end

4. Implement your own storage