From b869d2603c405650b3855e929951147596a6ce80 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 17 Mar 2026 22:45:41 -0700 Subject: [PATCH] Extract extension from 2-segment URL paths for image operations Go's parseURLPath extracts the file extension from all URL formats including 2-segment paths like /vid,fid.jpg. The Rust version only handled 3-segment paths (/vid/fid/filename.ext), so extensions in 2-segment paths were lost. This caused image resize/crop operations requested via query params to be silently skipped for those paths. --- seaweed-volume/src/server/handlers.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/seaweed-volume/src/server/handlers.rs b/seaweed-volume/src/server/handlers.rs index c54ad8ece..06e87a678 100644 --- a/seaweed-volume/src/server/handlers.rs +++ b/seaweed-volume/src/server/handlers.rs @@ -1704,10 +1704,18 @@ fn is_image_crop_ext(ext: &str) -> bool { fn extract_extension_from_path(path: &str) -> String { let parts: Vec<&str> = path.trim_start_matches('/').split('/').collect(); if parts.len() >= 3 { + // 3-segment path: /vid/fid/filename.ext let filename = parts[2]; if let Some(dot_pos) = filename.rfind('.') { return filename[dot_pos..].to_lowercase(); } + } else if parts.len() >= 1 { + // 2-segment path: /vid,fid.ext or /vid/fid.ext + // Go's parseURLPath extracts ext from the full path for all formats + let last = parts[parts.len() - 1]; + if let Some(dot_pos) = last.rfind('.') { + return last[dot_pos..].to_lowercase(); + } } String::new() }