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-datarequest.
Enums§
- Error
- An error type for the
formdatacrate.
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-datainformation from a stream as aFormData. - write_
formdata - Stream out
multipart/form-databody 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-databody content matching the passed informdataas Transfer-Encoding: Chunked. This does not stream out headers, so the caller must stream those out before calling write_formdata().