SuperAPI AI 工具集

axum-impl-file-upload

设计与创作

查看项目

更新于 10-16 09:56

技能介绍

用途:在 Axum 中编写接收文件上传或 multipart/form-data 请求的处理函数,适用于浏览器 input type=file 表单、图片或文档上传等场景。

主要能力:通过 axum::extract::Multipart 提取 multipart 请求体,需启用 multipart Cargo feature,否则不可用。API 在 Axum 0.7 与 0.8 一致。提供 next_field()、Field 的 name、file_name、content_type、headers、bytes、text、chunk 等方法。

使用方式:Multipart 属于 FromRequest 提取器,会消费请求体,必须作为处理函数最后一个参数,且每个处理函数只能有一个消费请求体的提取器;State、Path、HeaderMap 等 FromRequestParts 提取器放在前面。用 while let Some(field) = multipart.next_field().await 循环读取直到 Ok(None),在调用 bytes()/text()/chunk() 前先读取字段元数据。小而有界字段可缓冲,大文件或大小未知的文件用 chunk() 流式写入 tokio::fs::File。

限制:Axum 默认通过 DefaultBodyLimit 将请求体限制为 2 MB,超过会返回 413;可用 DefaultBodyLimit::max(n) 提高上限,或 DefaultBodyLimit::disable() 配合 RequestBodyLimitLayer::new(n) 设置硬上限,不可只调用 disable()。file_name() 与 content_type() 由客户端提供,不可信,不可用于安全决策,目标路径须自行生成并清洗。next_field() 与 chunk() 返回 Result,生产代码应映射 MultipartError 为 400 类响应,而非 unwrap。

分类:编程与开发。