1
0
Fork
You've already forked actix-form-data
0
  • Rust 98%
  • Nix 2%
2026年07月07日 15:26:10 -05:00
.forgejo/workflows Add forgejo actions 2024年03月27日 19:04:02 -05:00
examples Remove thiserror fr fr 2026年01月19日 20:09:31 -06:00
src Make ErrorKind public 2026年01月19日 20:17:39 -06:00
.gitignore Commit lockfile 2026年01月19日 20:06:13 -06:00
Cargo.lock rc.4 with updated streem 2026年07月07日 15:26:10 -05:00
Cargo.toml rc.4 with updated streem 2026年07月07日 15:26:10 -05:00
flake.lock Update flake 2026年06月21日 12:34:43 -05:00
flake.nix Update flake 2026年06月21日 12:34:43 -05:00
LICENSE Add Bytes field, add docs, and reorganize 2018年04月30日 15:24:01 -05:00
README.md Update repo url, readme examples 2022年03月08日 12:07:33 -06:00

Actix Form Data

A library for retrieving form data from Actix Web's multipart streams. It can stream uploaded files onto the filesystem (its main purpose), but it can also parse associated form data.

Usage

Add it to your dependencies.

# Cargo.toml
[dependencies]
actix-web = "4.0.0"
actix-form-data = "0.6.0"

Require it in your project.

// src/lib.rs or src/main.rs
useform_data::{Field,Form,Value};

Overview

First, you'd create a form structure you want to parse from the multipart stream.

letform=Form::<()>::new().field("field-name",Field::text());

This creates a form with one required field named "field-name" that will be parsed as text.

Then, pass it as a middleware.

App::new().wrap(form.clone()).service(resource("/upload").route(post().to(upload)))

In your handler, get the value

asyncfn upload(uploaded_content: Value<()>)-> HttpResponse{...}

And interact with it

letfield_value=matchvalue{Value::Map(muthashmap)=>{hashmap.remove("field-name")?;}_=>returnNone,};...

Example

/// examples/simple.rs
useactix_form_data::{Error,Field,Form,Value};useactix_web::{web::{post,resource},App,HttpResponse,HttpServer,};usefutures_util::stream::StreamExt;asyncfn upload(uploaded_content: Value<()>)-> HttpResponse{println!("Uploaded Content: {:#?}",uploaded_content);HttpResponse::Created().finish()}#[actix_rt::main]asyncfn main()-> Result<(),anyhow::Error>{letform=Form::new().field("Hey",Field::text()).field("Hi",Field::map().field("One",Field::int()).field("Two",Field::float()).finalize(),).field("files",Field::array(Field::file(|_,_,mutstream|asyncmove{whileletSome(res)=stream.next().await{res?;}Ok(())asResult<(),Error>})),);println!("{:?}",form);HttpServer::new(move||{App::new().wrap(form.clone()).service(resource("/upload").route(post().to(upload)))}).bind("127.0.0.1:8080")?.run().await?;Ok(())}

Contributing

Feel free to open issues for anything you find an issue with. Please note that any contributed code will be licensed under the GPLv3.

License

Copyright © 2021 Riley Trautman

Actix Form Data is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Actix Form Data is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. This file is part of Actix Form Data.

You should have received a copy of the GNU General Public License along with Actix Form Data. If not, see http://www.gnu.org/licenses/.