Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gjaldon/ectophile
Ectophile is an extension for Ecto models to instantly support file uploads.
https://github.com/gjaldon/ectophile
Last synced: 12 days ago
JSON representation
Ectophile is an extension for Ecto models to instantly support file uploads.
- Host: GitHub
- URL: https://github.com/gjaldon/ectophile
- Owner: gjaldon
- License: mit
- Created: 2015-09-11T18:52:11.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2016-02-07T13:34:10.000Z (almost 9 years ago)
- Last Synced: 2024-10-15T17:19:26.349Z (24 days ago)
- Language: Elixir
- Size: 33.2 KB
- Stars: 42
- Watchers: 7
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- freaking_awesome_elixir - Elixir - Ecto extension to instantly support file uploads in models. (ORM and Datamapping)
- fucking-awesome-elixir - ectophile - Ecto extension to instantly support file uploads in models. (ORM and Datamapping)
- awesome-elixir - ectophile - Ecto extension to instantly support file uploads in models. (ORM and Datamapping)
README
Ectophile
========Ectophile is an extension for Ecto models to instantly support file uploads.
## Usage
`Ectophile` provides an `attachment_fields/2` macro for your model which is used like:
```elixir
defmodule MyApp.User do
use Ectophile #=> Note that this needs to be used before MyApp.Web so that the callbacks will work
use MyApp.Web, :modelschema "users" do
field :email, :stringattachment_fields :avatar
timestamps
end...
end
````attachment_fields/2` in the above example, defines two different fields which are:
- `field :avatar, Ectophile.Type`
- `field :avatar_upload, :any, virtual: true`The `:avatar` field is where the path to the file in your filesystem and filename is saved. `:avatar_upload` is the field we'll use for file uploads.
Keep in mind that you will need to create the necessary `migration` to add the `Ectophile` fields to your model like so:
```elixir
defmodule SampleMigration do
use Ecto.Migrationdef change do
create table(:users) do
add :email
add :avatar, :jsonb #=> The column we need for Ectophile's custom field
timestamps
end
end
end
```Also, set the `:otp_app` in your config like:
```elixir
# config/config.exs
use Mix.Configconfig :ectophile, otp_app: :yourapp
```In your application's top-level supervisor's `start/2` function, add the following to setup the directories where your files will be uploaded:
```elixir
import Ectophile.Helpersdef start(_type, _args) do
ensure_upload_paths_exist([MyApp.User]) #=> This creates all the required directories for your uploaded files
...
end
```After doing the migrations and defining your model's `attachment_fields`, you can then add file upload field to your model's form like:
```html
...
<%= label f, :avatar_upload, "Avatar" %>
<%= file_input f, :avatar_upload, class: "form-control" %>...
```That's it!!! Now every time a user uploads a file and submits a form, that file is stored in a configurable location in your `priv/static` directory and a reference to that file is stored in your database.
In your template, you can then do:
```html
```## Important links
* Documentation - to be published
* [License](https://github.com/gjaldon/ectophile/blob/master/LICENSE)