{"id":13580869,"url":"https://github.com/abonander/multipart","last_synced_at":"2025-04-06T06:32:10.511Z","repository":{"id":22178998,"uuid":"25510903","full_name":"abonander/multipart","owner":"abonander","description":"A backend-agnostic extension for file uploads in HTTP libraries for Rust","archived":true,"fork":false,"pushed_at":"2023-02-03T02:26:05.000Z","size":1339,"stargazers_count":192,"open_issues_count":21,"forks_count":94,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-03T18:18:23.726Z","etag":null,"topics":["crates","http","multipart","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abonander.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-10-21T08:23:42.000Z","updated_at":"2025-03-30T00:41:29.000Z","dependencies_parsed_at":"2023-02-18T02:25:25.414Z","dependency_job_id":null,"html_url":"https://github.com/abonander/multipart","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abonander%2Fmultipart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abonander%2Fmultipart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abonander%2Fmultipart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abonander%2Fmultipart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abonander","download_url":"https://codeload.github.com/abonander/multipart/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247445649,"owners_count":20939952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crates","http","multipart","rust"],"created_at":"2024-08-01T15:01:55.840Z","updated_at":"2025-04-06T06:32:10.191Z","avatar_url":"https://github.com/abonander.png","language":"Rust","readme":"# Multipart [![Build Status](https://travis-ci.org/abonander/multipart.svg?branch=master)](https://travis-ci.org/abonander/multipart) [![On Crates.io](https://img.shields.io/crates/v/multipart.svg)](https://crates.io/crates/multipart)\n\nClient- and server-side abstractions for HTTP file uploads (POST requests with  `Content-Type: multipart/form-data`).\n\nSupports several different (**sync**hronous API) HTTP crates. \n**Async**hronous (i.e. `futures`-based) API support will be provided by [multipart-async].\n\n##### Minimum supported Rust version: 1.36.0\n\n##### Maintenance Status: Passive\n\nAs the web ecosystem in Rust moves towards asynchronous APIs, the need for this crate in synchronous\nAPI form becomes dubious. This crate in its current form is usable enough, so as of June 2020 it\nis now in passive maintenance mode; bug reports will be addressed as time permits and PRs will be\naccepted but otherwise no new development of the existing API is taking place.\n\nLook for a release of [multipart-async] soon which targets newer releases of Hyper.\n\n### [Documentation](http://docs.rs/multipart/)\n\n## Integrations\n\nExample files demonstrating how to use `multipart` with these crates are available under [`examples/`](examples).\n\n### [Hyper ![](https://img.shields.io/crates/v/hyper.svg)](https://crates.io/crates/hyper) \nvia the `hyper` feature (enabled by default). \n\n**Note: Hyper 0.9, 0.10 (synchronous API) only**; support for asynchronous APIs will be provided by [multipart-async].\n \nClient integration includes support for regular `hyper::client::Request` objects via `multipart::client::Multipart`, as well\nas integration with the new `hyper::Client` API via `multipart::client::lazy::Multipart` (new in 0.5).\n\nServer integration for `hyper::server::Request` via `multipart::server::Multipart`.\n\n### [Iron ![](https://img.shields.io/crates/v/iron.svg)](https://crates.io/crates/iron) \nvia the `iron` feature.\n\nProvides regular server-side integration with `iron::Request` via `multipart::server::Multipart`, \nas well as a convenient `BeforeMiddleware` implementation in `multipart::server::iron::Intercept`.\n\n### [Nickel ![](https://img.shields.io/crates/v/nickel.svg)](https://crates.io/crates/nickel) \u003csup\u003ereturning to `multipart` in 0.14!\u003c/sup\u003e\nvia the `nickel` feature.\n\nProvides server-side integration with `\u0026mut nickel::Request` via `multipart::server::Multipart`. \n\n### [tiny_http ![](https://img.shields.io/crates/v/tiny_http.svg)](https://crates.io/crates/tiny_http)\nvia the `tiny_http` feature.\n\nProvides server-side integration with `tiny_http::Request` via `multipart::server::Multipart`.\n\n### [Rocket ![](https://img.shields.io/crates/v/rocket.svg)](https://crates.io/crates/rocket)\n\nDirect integration is not provided as the Rocket folks seem to want to handle `multipart/form-data`\nbehind the scenes which would supercede any integration with `multipart`. However, an example is available\nshowing how to use `multipart` on a Rocket server: [examples/rocket.rs](examples/rocket.rs)\n\n## ⚡ Powered By ⚡\n\n### [buf_redux ![](https://img.shields.io/crates/v/buf_redux.svg)](https://crates.io/crates/buf_redux)\n\nCustomizable drop-in `std::io::BufReader` replacement, created to be used in this crate.\nNeeded because it can read more bytes into the buffer without the buffer being empty, necessary\nwhen a boundary falls across two reads. (It was easier to author a new crate than try to get this added\nto `std::io::BufReader`.)\n\n### [httparse ![](https://img.shields.io/crates/v/httparse.svg)](https://crates.io/crates/httparse)\n\nFast, zero-copy HTTP header parsing, used to read field headers in `multipart/form-data` request bodies.\n\n### [twoway ![](https://img.shields.io/crates/v/twoway.svg)](https://crates.io/crates/twoway)\n\nFast string and byte-string search. Used to find boundaries in the request body. Uses SIMD acceleration\nwhen possible.\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any\nadditional terms or conditions.\n\n[multipart-async]: https://github.com/abonander/multipart-async\n","funding_links":[],"categories":["Rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabonander%2Fmultipart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabonander%2Fmultipart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabonander%2Fmultipart/lists"}