Library
Module
Module type
Parameter
Class
Class type
Http_multipart_formdata
is a non-blocking, streaming HTTP multipart/formdata
parser. Its design is based on two main ideas:
The parser implements HTTP multipart/form-data
standard as defined in RFC 7578.
and read = [
| `End
The reader has completed reading.
*)| `Header of part_header
Multipart part header data.
*)| `Body of Cstruct.t
Multipart part body data.
*)| `Body_end
reader
has completed reading the Multipart body data.
| `Awaiting_input of [ `Cstruct of Cstruct.t | `Eof ] -> read
The reader is waiting for it to be provided with input data. This is only returned when `Incremental
is chosen as input
.
| `Error of string
]
read
represents both the current state and data read by a reader
.
and input = [
| `Cstruct of Cstruct.t
A bigstring input.
*)| `Incremental
The caller of the library periodically provides input to the parser.
*) ]
boundary content_type
parses content_type
to extract boundary
value. content_type
is the HTTP request Content-Type
header value.
let content_type =
"multipart/form-data; \
boundary=---------------------------735323031399963166993862150"
in
Http_multipart_formdata.boundary content_type
API to stream multipart parts. Use these functions when you have to handle HTTP form submissions which has large file uploads and at the same time be memory efficient.
reader ?read_buffer_size boundary input
creates reader. The default value for read_buffer_size
is 1KB.
unconsumed reader
returns any leftover data still remaining after reader
returns `End
.
Use these functions if the HTTP form submission is of a relatively small size.
val parts :
boundary ->
string ->
((field_name * (part_header * part_body)) list, string) result
parts boundary http_body
returns a list of HTTP multipart parts parsed in http_body
.
The returned parts list is keyed to a form field name so that one can do:
let parts_kv = parts boundary http_body in
match List.assoc_opt "field1" parts_vk with
| Some v -> ...
| None -> ..
val name : part_header -> string
name t
returns the form field name.
val content_type : part_header -> string
content_type t
returns the part content-type.
val filename : part_header -> string option
filename t
returns the uploaded filename if the multipart is a file.
val find : string -> part_header -> string option
find name t
returns the multipart parameter value associated with name
.
val pp_part_header : Format.formatter -> part_header -> unit
val pp_read_result : Format.formatter -> read -> unit
val pp_boundary : Format.formatter -> boundary -> unit