image_plug_parser v1.0.0 ImagePlugParser
Parses image in PUT request body.
Usage
Image parser must be used only in controller
defmodule Server.Web.FilesController do
use Server.Web, :controller
plug Plug.Parsers,
parsers: [ImagePlugParser],
subtypes: ["jpeg", "png"]
def upload(conn, %{"file" => %{filename: filename, path: path, content_type: mimetype}}) do
path
|> FilesManager.upload(filename, mimetype)
|> response(conn)
end
end
and router must set wildcard path with name filename
defmodule Server.Web.Router do
use Server.Web, :router
pipeline :api do
plug :accepts, ["json"]
end
scope "/api", Server.Web do
pipe_through :api
put "/files/:page_id/*filename", FilesController, :upload
end
end
Options
:subtypes
- list of supported image content types, eg. jpeg or png
All options supported by Plug.Conn.read_body/2
are also supported here.
They are repeated here for convenience:
:length
- sets the maximum number of bytes to read from the request, defaults to 8_000_000 bytes:read_length
- sets the amount of bytes to read at one time from the underlying socket to fill the chunk, defaults to 1_000_000 bytes:read_timeout
- sets the timeout for each socket read, defaults to 15_000ms
So by default, Plug.Parsers
will read 1_000_000 bytes at a time from the
socket with an overall limit of 8_000_000 bytes.
Link to this section Summary
Functions
Callback implementation for Plug.Parsers.init/1
Attempts to parse the connection’s request body given the content-type type, subtype, and its parameters
Link to this section Functions
Callback implementation for Plug.Parsers.init/1
.
Attempts to parse the connection’s request body given the content-type type, subtype, and its parameters.
The arguments are:
- the
Plug.Conn
connection type
, the content-type type (e.g.,"x-sample"
for the"x-sample/json"
content-type)subtype
, the content-type subtype (e.g.,"json"
for the"x-sample/json"
content-type)params
, the content-type parameters (e.g.,%{"foo" => "bar"}
for the"text/plain; foo=bar"
content-type)
This function should return:
{:ok, body_params, conn}
if the parser is able to handle the given content-type;body_params
should be a map{:next, conn}
if the next parser should be invoked{:error, :too_large, conn}
if the request goes over the given limit
Callback implementation for Plug.Parsers.parse/5
.