Multipartable

Build a multipart form body.

General Usage Example

file_headers = %{
  "Content-Transfer-Encoding" => "binary",
  "Content-Disposition" => "form-data",
  "Content-Type"=>"text/html"
}

file_opts = %{name: "file_upload", filename: "text.txt"}

data_headers = %{"Content-Type" => "string"}
data_opts = %{name: "some_params"}
data_content = "some params value"

parts = [
  {:file, file_headers, file_content, file_opts},
  {:data, data_headers, data_content, data_opts}
]
boundary = "-------elixirMultipartBoundary"

# require a list of parts
# each part is a tuple where first element is atom(:file, :data, or :multipart),
# second element map headers, third element is the content and last element is
# map optional attributes
Multipartable.build(boundary, parts) == expected

To construct a nested multipart form body.


nested_parts = [{:data, data_headers, data_content, data_opts}]
parts = [
  {:file, file_headers, file_content, file_opts},
  {:multipart, "-------elixirMultipartBoundaryNested", nested_parts}
]
boundary = "-------elixirMultipartBoundary"
Multipartable.build(boundary, parts) == expected

Installation

If available in Hex, the package can be installed as:

  1. Add multipartable to your list of dependencies in mix.exs:
```elixir
def deps do
  [{:multipartable, "~> 0.1.0"}]
end
```
  1. Ensure multipartable is started before your application:
```elixir
def application do
  [applications: [:multipart_post]]
end
```