diff --git a/src/interfaces/api/routes.rs b/src/interfaces/api/routes.rs index 94c6d834..99c07f55 100644 --- a/src/interfaces/api/routes.rs +++ b/src/interfaces/api/routes.rs @@ -2,6 +2,7 @@ use std::sync::Arc; use axum::{ routing::{get, post, put, delete}, Router, + extract::DefaultBodyLimit, response::Json as AxumJson, }; use serde_json::json; @@ -143,6 +144,7 @@ pub fn create_api_routes(app_state: &AppState) -> Router { .route("/upload", post(FileHandler::upload_file_with_thumbnails)) .route("/{id}", get(FileHandler::download_file)) .route("/{id}/thumbnail/{size}", get(FileHandler::get_thumbnail)) + .layer(DefaultBodyLimit::max(10 * 1024 * 1024 * 1024)) // 10 GB for file uploads .with_state(app_state.clone()); // File operations with trash support diff --git a/src/main.rs b/src/main.rs index 7ec8aa4e..24d0dbb5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use std::path::PathBuf; use std::sync::Arc; use axum::Router; +use axum::extract::DefaultBodyLimit; use tower_http::trace::TraceLayer; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -153,6 +154,10 @@ async fn main() -> Result<(), Box> { use oxicloud::interfaces::middleware::redirect::redirect_middleware; app = app.layer(axum::middleware::from_fn(redirect_middleware)); + // Increase the default body limit to 10 GB to allow large file uploads. + // Without this Axum caps Multipart bodies at 2 MB. + app = app.layer(DefaultBodyLimit::max(10 * 1024 * 1024 * 1024)); + // Start server let addr = SocketAddr::from(([0, 0, 0, 0], 8086)); tracing::info!("Starting OxiCloud server on http://{}", addr);