Expand description
File upload support for modo applications.
Provides multipart form parsing, in-memory buffering, pluggable storage
backends, and file validation. The #[derive(FromMultipart)]
macro generates the boilerplate for mapping multipart fields to struct fields.
§Features
local(default) — local filesystem storage viastorage::local::LocalStorage.opendal— S3-compatible object storage viastorage::opendal::OpendalStorageand theS3Configconfiguration type.
§Quick start
ⓘ
use modo_upload::{FromMultipart, MultipartForm, UploadedFile, storage};
use modo_upload::UploadConfig;
#[derive(FromMultipart)]
struct UploadForm {
#[upload(max_size = "5mb", accept = "image/*")]
avatar: UploadedFile,
name: String,
}
#[modo::handler(POST, "/upload")]
async fn upload(form: MultipartForm<UploadForm>) -> modo::JsonResult<()> {
let storage = storage(&UploadConfig::default())?;
let stored = storage.store("avatars", &form.avatar).await?;
println!("stored at {}", stored.path);
Ok(modo::Json(()))
}Re-exports§
pub use storage::FileStorage;pub use storage::StoredFile;pub use storage::storage;
Modules§
- storage
- Pluggable storage backends for persisted file uploads.
Structs§
- Buffered
Upload - An uploaded file fully buffered in memory as a sequence of chunks.
- Multipart
Form - Axum extractor that parses
multipart/form-data, auto-sanitizes text fields, and exposes optional field-level validation. - Upload
Config - Upload configuration, deserialized from YAML via
modo::config::load(). - Uploaded
File - An uploaded file fully buffered in memory.
Enums§
- Storage
Backend - Storage backend selector.
Traits§
- From
Multipart - Trait for parsing a struct from
multipart/form-data.
Functions§
Derive Macros§
- From
Multipart - Derive macro for parsing
multipart/form-datainto a struct.