From 7bad3ce3825badc9d76a1c44d6db72c643a8f86c Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 17 Jun 2026 13:21:20 +0800 Subject: [PATCH] fix: make ConnectInfo optional in serve_image to prevent 500 --- src/api/image.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/api/image.rs b/src/api/image.rs index 98a15f5..a9553df 100644 --- a/src/api/image.rs +++ b/src/api/image.rs @@ -7,7 +7,7 @@ #[cfg(feature = "server")] use axum::{ - extract::{ConnectInfo, Path, Query}, + extract::{ConnectInfo, Extension, Path, Query}, http::{header, HeaderValue, StatusCode}, response::{IntoResponse, Response}, }; @@ -333,12 +333,13 @@ async fn write_disk_cache(cache_key: &str, cached: &CachedImage) { /// 依次执行:限流 → 路径安全校验 → 参数校验 → 无参数时直接返回原文件 → /// 查询内存缓存 → 查询磁盘缓存 → 读取并解码 → 处理 → 写入两级缓存 → 返回。 pub async fn serve_image( - ConnectInfo(addr): ConnectInfo, + connect_info: Option>>, Path(path): Path, Query(params): Query, headers: HeaderMap, ) -> Response { - let ip = crate::api::rate_limit::get_client_ip_with_peer(&headers, Some(addr)); + let peer = connect_info.map(|Extension(ConnectInfo(addr))| addr); + let ip = crate::api::rate_limit::get_client_ip_with_peer(&headers, peer); if let Err(status) = crate::api::rate_limit::check_image_limit(&ip) { return status.into_response(); }