Skip to content

bettyblocks/file_storage_api

Repository files navigation

elixir workflow Hex.pm Hex Docs

FileStorageApi

Library to be able to upload and manage files to different storage service azure/s3

Installation

It can be added to your project by adding

def deps do
  [
    {:file_storage_api, "~> 1.0"}
  ]
end

Configuration

Ability to set storage engine currently S3 and Azure supported. For tests Mock can be used with the mox library.

config :file_storage_api, :storage_api, engine: Azure

S3 configuration (options from ex_aws_s3 library)

config :file_storage_api, :s3_config,
  host: "127.0.0.1",
  scheme: "http://",
  port: 9000,
  access_key_id: "admin",
  secret_access_key: "password",
  path_style: true

For test S3 can also be mocked by

config :file_storage_api, :s3_config, module: AwsMock

Azure configuration (options from azure library)

config :file_storage_api, :azure_blob,
  account_key: "password",
  account_name: "user",
  environment_suffix: "core.windows.net",
  host: ,
  development: "true" || "false"

It will need the package file in linux to be able to read mime types and work.

Dynamic configuration

You can use a map or keyword list to pass a long dynamic configuration in the connection field.

For azure

%{
  engine: :azure,
  config: %{
    host: "postfix.example",
    secret_key: "YWNjb3VudF9rZXk=",
    access_key: "amazing"
  }
}

For S3

%{
  engine: :s3,
  config: %{host: "test.example", secret_key: "test123", access_key: "amazing", scheme: "http://"}
}

For mocking you can set the engine to Mock

Multiple storage accounts

It can be necessary to connect to multiple S3- or Azure-accounts. This can be done by adding multiple connections, each with its own engine. To facilitate testing, it is possible to change the engine per connection.

⚠️ A connection-name must end with _conn.


Example

Make a custom-connection, with a S3-engine in development, and a Azure-engine in production.

File: config/dev.exs:

config :file_storage_api, :custom_conn, engine: :s3

config :file_storage_api, :custom_s3_config,
  host: "127.0.0.1",
  scheme: "http://",
  port: 9000,
  access_key_id: "custom-admin",
  secret_access_key: "custom-password",
  path_style: true

File: config/prod.exs:

config :file_storage_api, :custom_conn, engine: :azure

config :file_storage_api, :custom_azure_blob,
  account_key: "custom-password",
  account_name: "custom-user",
  environment_suffix: "core.windows.net",
  host: ,
  development: "true" || "false"