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