backend :: map
file_id :: String.t
uploadable :: :file.io_device
delete(backend, file_id) :: :ok | {:error, :file.posix}
exists?(backend, file_id) :: boolean
get(backend, String.t) :: Exfile.File.t
init(map) :: {:ok, backend} | {:error, atom}
open(backend, file_id) :: {:ok, :file.io_device} | {:error, :file.posix}
path(backend, file_id) :: Path.t
size(backend, file_id) :: {:ok, pos_integer} | {:error, :file.posix}
upload(backend, uploadable) :: {:ok, Exfile.File.t} | {:error, atom}