From 447cb2eee535c085ae6c02d8c01b4f7b3f6c3916 Mon Sep 17 00:00:00 2001 From: xiaoski Date: Fri, 24 Apr 2026 16:25:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=9B=BE=E7=89=87=E6=8C=89?= =?UTF-8?q?=E5=AE=9E=E9=99=85=E6=A0=BC=E5=BC=8F=E5=82=A8=E5=AD=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/channels/feishu.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/channels/feishu.rs b/src/channels/feishu.rs index ed6c4a2..651d7a5 100644 --- a/src/channels/feishu.rs +++ b/src/channels/feishu.rs @@ -356,14 +356,28 @@ impl FeishuChannel { return Err(ChannelError::Other(format!("Image download failed {}: {}", status, error_text))); } + let content_type = resp + .headers() + .get("content-type") + .and_then(|v| v.to_str().ok()) + .unwrap_or("image/jpeg"); + + let ext = match content_type { + "image/png" => "png", + "image/gif" => "gif", + "image/webp" => "webp", + "image/bmp" => "bmp", + _ => "jpg", + }; + let data = resp.bytes().await .map_err(|e| ChannelError::Other(format!("Failed to read image data: {}", e)))? .to_vec(); #[cfg(debug_assertions)] - tracing::debug!(data_len = %data.len(), "Downloaded image data"); + tracing::debug!(data_len = %data.len(), content_type = %content_type, "Downloaded image data"); - let filename = format!("{}_{}.jpg", message_id, &image_key[..8.min(image_key.len())]); + let filename = format!("{}_{}.{}", message_id, &image_key[..8.min(image_key.len())], ext); let file_path = media_dir.join(&filename); tokio::fs::write(&file_path, &data).await