diff --git a/src/main.rs b/src/main.rs index c7da443..cba842a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,6 +25,7 @@ async fn main() { let app = Router::new() .route("/", get(root)) .route("/tiles/{z}/{x}/{y}", get(get_tile)) + .route("/test", get(get_test)) .layer(cors); // 使用配置好的CORS // 启动服务器,监听端口 3050 @@ -77,6 +78,32 @@ async fn get_tile( } } +// 瓦片处理器 +async fn get_test() -> Result { + // 异步读取文件 + match fs::read("/Users/xiang.li1/projects/radarprocess/china.png").await { + Ok(file_data) => { + // 创建响应,设置正确的 Content-Type 和缓存头 + let response = Response::builder() + .status(StatusCode::OK) + .header(header::CONTENT_TYPE, "image/png") + .header(header::CACHE_CONTROL, "public, max-age=3600") // 缓存1小时 + .header( + header::ETAG, + format!( + "\"{}\"", + generate_etag("/Users/xiang.li1/projects/radarprocess/china.png") + ), + ) + .body(file_data.into()) + .map_err(|_| TileError::InternalServerError)?; + + Ok(response) + } + Err(_) => Err(TileError::TileNotFound), + } +} + // 生成简单的 ETag fn generate_etag(path: &str) -> String { use std::collections::hash_map::DefaultHasher;