36 个版本

0.7.2 2024 年 7 月 6 日
0.6.2 2024 年 6 月 8 日
0.6.1 2023 年 8 月 29 日
0.6.0 2023 年 2 月 26 日
0.1.2 2019 年 6 月 2 日

#564 in HTTP 服务器

Download history 31389/week @ 2024-05-01 32155/week @ 2024-05-08 37091/week @ 2024-05-15 35762/week @ 2024-05-22 39827/week @ 2024-05-29 38912/week @ 2024-06-05 38513/week @ 2024-06-12 36145/week @ 2024-06-19 39359/week @ 2024-06-26 33818/week @ 2024-07-03 32412/week @ 2024-07-10 33244/week @ 2024-07-17 34353/week @ 2024-07-24 31817/week @ 2024-07-31 31560/week @ 2024-08-07 20508/week @ 2024-08-14

124,860 每月下载量
63 Crates 中使用(56 个直接使用)

MIT/Apache

1.5MB
35K SLoC

actix-multipart

crates.io Documentation Version MIT or Apache 2.0 licensed
dependency status Download Chat on Discord

为 Actix Web 提供多部分表单支持。

示例

use actix_web::{post, App, HttpServer, Responder};

use actix_multipart::form::{json::Json as MPJson, tempfile::TempFile, MultipartForm};
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct Metadata {
    name: String,
}

#[derive(Debug, MultipartForm)]
struct UploadForm {
    #[multipart(limit = "100MB")]
    file: TempFile,
    json: MPJson<Metadata>,
}

#[post("/videos")]
pub async fn post_video(MultipartForm(form): MultipartForm<UploadForm>) -> impl Responder {
    format!(
        "Uploaded file {}, with size: {}",
        form.json.name, form.file.size
    )
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(move || App::new().service(post_video))
        .bind(("127.0.0.1", 8080))?
        .run()
        .await
}

cURL 请求

curl -v --request POST \
  --url https://127.0.0.1:8080/videos \
  -F 'json={"name": "Cargo.lock"};type=application/json' \
  -F file=@./Cargo.lock

更多示例请查看示例仓库 →

依赖项

~14–27MB
~489K SLoC