TODO: Add description
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
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
storage
: module which handle storage file application Currently, ExTus supportExTus.Storage.Local
andExTus.Storage.S3
base_dir
is where you want to store uploaded file
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
virtual_host
: true if you want to use "https://#{bucket}.s3.amazonaws.com" host. default is "https://s3.amazonaws.com/#{bucket}"asset_host
: host which you use to serve uploaded filesbucket
: name of s3 bucketchunk_size
: size of part for multipart upload
If you use S3 to store file, add below dependencies
{:poison, "~> 2.0"},
{:hackney, "~> 1.6"}
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
- In progress
You can implement interfaceStorage