From d8c1b433945ee826a62e21daf67af7358d68a2b2 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sun, 6 Sep 2026 12:32:57 +0200 Subject: [PATCH] fix: stream s3 proxy request body instead of buffering in memory --- control-plane/api-gateway/src/routes/s3_proxy.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/control-plane/api-gateway/src/routes/s3_proxy.rs b/control-plane/api-gateway/src/routes/s3_proxy.rs index 00dd73cc..110613b2 100644 --- a/control-plane/api-gateway/src/routes/s3_proxy.rs +++ b/control-plane/api-gateway/src/routes/s3_proxy.rs @@ -106,21 +106,13 @@ async fn proxy( let reqwest_method = reqwest::Method::from_bytes(method.as_str().as_bytes()).unwrap_or(reqwest::Method::GET); - let body_bytes = axum::body::to_bytes(body, usize::MAX).await.map_err(|e| { - ( - StatusCode::BAD_REQUEST, - Json(json!({ "error": format!("failed to read request body: {}", e) })), - ) - })?; + let body_stream = body.into_data_stream(); + let request_body = reqwest::Body::wrap_stream(body_stream); let client = reqwest::Client::new(); - let mut request = client.request(reqwest_method, &url).body(body_bytes); + let mut request = client.request(reqwest_method, &url).body(request_body); for (key, value) in headers.iter() { - let key_lower = key.as_str().to_lowercase(); - if key_lower == "content-length" { - continue; - } if let Ok(value_str) = value.to_str() { request = request.header(key.as_str(), value_str); }