ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - elixir-waffle/waffle: Flexible file upload and attachment library for Elixir
Flexible file upload and attachment library for Elixir - elixir-waffle/waffle
Visit Site

GitHub - elixir-waffle/waffle: Flexible file upload and attachment library for Elixir

GitHub - elixir-waffle/waffle: Flexible file upload and attachment library for Elixir

Waffle Sponsored by Evrone

Hex.pm Version waffle documentation

Waffle is a flexible file upload library for Elixir

Waffle is a flexible file upload library for Elixir with straightforward integrations for Amazon S3 and ImageMagick.

Documentation

Installation

Add the latest stable release to your mix.exs file, along with the required dependencies for ExAws if appropriate:

defp deps do
  [
    {:waffle, "~> 1.1"},

    # If using S3:
    {:ex_aws, "~> 2.1.2"},
    {:ex_aws_s3, "~> 2.0"},
    {:hackney, "~> 1.9"},
    {:sweet_xml, "~> 0.6"}
  ]
end

Then run mix deps.get in your shell to fetch the dependencies.

Usage

After installing Waffle, another two things should be done:

  1. setup a storage provider
  2. define a definition module

Setup a storage provider

Waffle has two built-in storage providers:

  • Waffle.Storage.Local
  • Waffle.Storage.S3

Other available storage providers are supported by the community.

An example for setting up Waffle.Storage.Local:

config :waffle,
  storage: Waffle.Storage.Local,
  asset_host: "http://static.example.com" # or {:system, "ASSET_HOST"}

An example for setting up Waffle.Storage.S3:

config :waffle,
  storage: Waffle.Storage.S3,
  bucket: "custom_bucket",                # or {:system, "AWS_S3_BUCKET"}
  asset_host: "http://static.example.com" # or {:system, "ASSET_HOST"}

config :ex_aws,
  json_codec: Jason
  # any configurations provided by https://github.com/ex-aws/ex_aws

Define a definition module

Waffle requires a definition module which contains the relevant functions to store and retrieve files:

  • Optional transformations of the uploaded file
  • Where to put your files (the storage directory)
  • How to name your files
  • How to secure your files (private? Or publicly accessible?)
  • Default placeholders

This module can be created manually or generated by mix waffle.g automatically.

As an example, we will generate a definition module for handling avatars:

mix waffle.g avatar

This should generate a file at lib/[APP_NAME]_web/uploaders/avatar.ex. Check this file for descriptions of configurable options.

Examples

Usage with Ecto

Waffle comes with a companion package for use with Ecto. If you intend to use Waffle with Ecto, it is highly recommended you also add the waffle_ecto dependency. Benefits include:

  • Changeset integration
  • Versioned urls for cache busting (.../thumb.png?v=63601457477)

Other Storage Providers

Testing

The basic test suite can be run with without supplying any S3 information:

mix test

In order to test S3 capability, you must have access to an S3/equivalent bucket. For S3 buckets, the bucket must be configured to allow ACLs and it must allow public access.

The following environment variables will be used by the test suite:

  • WAFFLE_TEST_BUCKET
  • WAFFLE_TEST_BUCKET2
  • WAFFLE_TEST_S3_KEY
  • WAFFLE_TEST_S3_SECRET
  • WAFFLE_TEST_REGION

After setting these variables, you can run the full test suite with mix test --include s3:true.

Attribution

Great thanks to Sean Stavropoulos (@stavro) for the original awesome work on the library.

This project is forked from Arc from the version v0.11.0.

License

Copyright 2019 Boris Kuznetsov [email protected]

Copyright 2015 Sean Stavropoulos

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory