tus v0.1.3 Tus View Source
An implementation of a tus.io server in Elixir
tus is a protocol based on HTTP for resumable file uploads. Resumable means that an upload can be interrupted at any moment and can be resumed without re-uploading the previous data again.
An interruption may happen willingly, if the user wants to pause, or by accident in case of an network issue or server outage.
It’s currently capable of accepting uploads with arbitrary sizes and storing them locally on disk. Due to its modularization and extensibility, support for any cloud provider could easily be added.
Features
This library implements the core TUS API v1.0.0 protocol and the following extensions:
- Creation Protocol (http://tus.io/protocols/resumable-upload.html#creation). Deferring the upload’s length is not possible.
- Termination Protocol (http://tus.io/protocols/resumable-upload.html#termination)
Installation
Add this repo to your list of dependencies in mix.exs
:
def deps do
[
{:tus, "~> 0.1.0"},
]
end
Usage
1. Add new controller(s)
defmodule DemoWeb.UploadController do
use DemoWeb, :controller
use Tus.Controller
# start upload optional callback
def on_begin_upload(file) do
...
:ok # or {:error, reason} to reject the uplaod
end
# Completed upload optional callback
def on_complete_upload(file) do
...
end
end
2. Add routes for each of your upload controllers
scope "/files", DemoWeb do
options "/", UploadController, :options
match :head, "/:uid", UploadController, :head
post "/", UploadController, :post
patch "/:uid", UploadController, :patch
delete "/:uid", UploadController, :delete
end
3. Add config for each controller (see next section)
Configuration (the global way)
# List here all of your upload controllers
config :tus, controllers: [DemoWeb.UploadController]
# This is the config for the DemoWeb.UploadController
config :tus, DemoWeb.UploadController,
storage: Tus.Storage.Local,
base_path: "priv/static/files/",
cache: Tus.Cache.Memory,
# max supported file size, in bytes (default 20 MB)
max_size: 1024 * 1024 * 20
storage
: module which handle storage file application This library includes onlyTus.Storage.Local
but you can install thetus_storage_s3
hex package to use Amazon S3.cache
: module for handling the temporary uploads metadata This library comes withTus.Cache.Memory
but you can install thetus_cache_redis
hex package to use a Redis based one.max_size
: hard limit on the maximum size an uploaded file can have
Options for Tus.Storage.Local
base_path
: where in the filesystem the uploaded files’ll be stored