FileStore

github.com coveralls.io hex.pm hex.pm hex.pm github.com

FileStore allows you to read, write, upload, download, and interact with files, regardless of where they are stored.

It includes adapters for the following storage backends:

View the documentation

Installation

The package can be installed by adding file_store to your list of dependencies in mix.exs:

def deps do
  [{:file_store, "~> 0.2"}]
end

Usage

Configure a new store:

iex> store = FileStore.new(
...>   adapter: FileStore.Adapters.Disk,
...>   storage_path: "/path/to/store/files",
...>   base_url: "http://example.com/files/"
...> )
%FileStore{...}

Write a file to the store:

iex> FileStore.write(store, "foo", "hello world")
:ok

Read a file from the store:

iex> FileStore.read(store, "foo")
{:ok, "hello world"}

Get information about a file in the store:

iex> FileStore.stat("foo")
{:ok, %FileStore.Stat{key: "foo", ...}}

Upload a file to the store:

iex> FileStore.upload(store, "/path/to/upload.txt", "bar")
:ok

Download a file in the store to disk:

iex> FileStore.download(store, "bar", "/path/to/download.txt")
:ok

Get a URL for the file:

iex> FileStore.get_public_url(store, "bar")
"http://example.com/files/bar"

Get a signed URL for the file:

iex> FileStore.get_signed_url(store, "bar")
{:ok, "http://..."}

List all files:

iex> Enum.to_list(FileStore.list!(store))
["bar"]

Delete a file:

iex> FileStore.delete(store, "bar")
:ok

Creating a store

You can also create a dedicated store in your application.

defmodule MyApp.Storage do
  use FileStore.Config, otp_app: :my_app
end

You'll need to provide configuration for this module:

config :my_app, MyApp.Storage,
  adapter: FileStore.Adapters.Null

Now, you can interact with your store more conveniently:

iex> MyApp.Storage.write("foo", "hello world")
:ok

iex> MyApp.Storage.read("foo")
{:ok, "hello world"}