Honu

Hex.pmDocumentation

https://en.wikipedia.org/wiki/Green_sea_turtle#Taxonomy

A WIP file upload and attachment library for Ecto

Installation

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

def deps do
  [
    {:honu, "~> 0.3.2"}
  ]
end

Usage

After installation it's necessary to create a folder in where the files will reside for the default Storage behaviour.

mkdir storage
touch storage/.keep
echo '# Honu storage\n/storage/*\n!/storage/.keep' >> .gitignore

After, generate the migration file for the blobs table:

mix ecto.gen.migration create_honu_blobs

And change the file to the following:

defmodule MyApp.Repo.Migrations.CreateHonuBlobs do
  use Ecto.Migration
  require Honu.Migration

  def change do
    Honu.Migration.create_blobs_table()
  end
end

Configure the environments accordingly:

# dev.exs
config :honu, Honu.Storage,
  storage: Honu.Storage.Disk,
  repo: MyApp.Repo,
  root_dir: "storage"

Optional, Honu also was support to serve the attachments. To do so, add the following configuration to the necessary environments:

config :honu, HonuWeb.Storage,
  storage: HonuWeb.Storage.Disk,
  # You can use mix phx.gen.secret to generate the secret
  secret_key_base: "SECRET HERE",
  repo: MyApp.Repo,
  service_urls_expire_in: 300

And finally forward the requests to the Honu app. In phoenix it's possible to do it with the following:

# router.ex
scope "/honu" do
  pipe_through :browser
  forward "/", HonuWeb.Router
end

Since HonuWeb.Router is just a plug app, it's also possible to add it to other plug apps besides phoenix. If it's done so, it's important to add CSRF protection for the delete endpoint.

Guides

User avatar example