Expand description
This library provides a type for storing multipart/form-data
data, as well as functions
to stream (read or write) such data over HTTP.
multipart/form-data
format as described by RFC 7578.
HTML forms with enctype=multipart/form-data
POST
their data in this format.
This enctype
is typically used whenever a form has file upload input fields,
as the default application/x-www-form-urlencoded
cannot handle file uploads.
Whether reading from a stream or writing out to a stream, files are never stored entirely in memory, but instead streamed through a buffer.
§Read Example
extern crate mime;
extern crate hyper;
extern crate formdata;
use hyper::server::{Server, Request, Response};
fn main() {
let server = Server::http("0.0.0.0:0").unwrap().handle(handler).unwrap();
}
fn handler(hyper_request: Request, res: Response) {
let (_, _, headers, _, _, mut reader) = hyper_request.deconstruct();
let form_data = formdata::read_formdata(&mut reader, &headers).unwrap();
for (name, value) in form_data.fields {
println!("Posted field name={} value={}", name, value);
}
for (name, file) in form_data.files {
println!("Posted file name={} path={:?}", name, file.path);
}
}
§Write Example
extern crate mime;
extern crate hyper;
extern crate formdata;
use std::path::Path;
use hyper::header::{Headers, ContentType};
use mime::{Mime, TopLevel, SubLevel};
use formdata::{FormData, FilePart};
fn main() {
let mut stream = ::std::io::stdout();
let mut photo_headers = Headers::new();
photo_headers.set(ContentType(Mime(TopLevel::Image, SubLevel::Gif, vec![])));
// no need to set Content-Disposition (in fact it will be rewritten)
let formdata = FormData {
fields: vec![ ("name".to_owned(), "Baxter".to_owned()),
("age".to_owned(), "1 month".to_owned()) ],
files: vec![ ("photo".to_owned(), FilePart::new(
photo_headers, Path::new("/tmp/puppy.gif"))) ],
};
let boundary = formdata::generate_boundary();
let count = formdata::write_formdata(&mut stream, &boundary, &formdata).unwrap();
println!("COUNT = {}", count);
}
Structs§
- File
Part - A file that is to be inserted into a
multipart/*
or alternatively an uploaded file that was received as part ofmultipart/*
parsing. - Form
Data - The extracted text fields and uploaded files from a
multipart/form-data
request.
Enums§
- Error
- An error type for the
formdata
crate.
Functions§
- generate_
boundary - Generate a valid multipart boundary, statistically unlikely to be found within the content of the parts.
- read_
formdata - Parse MIME
multipart/form-data
information from a stream as aFormData
. - write_
formdata - Stream out
multipart/form-data
body content matching the passed informdata
. This does not stream out headers, so the caller must stream those out before calling write_formdata(). - write_
formdata_ chunked - Stream out
multipart/form-data
body content matching the passed informdata
as Transfer-Encoding: Chunked. This does not stream out headers, so the caller must stream those out before calling write_formdata().