This commit is contained in:
tsuki 2025-07-25 22:59:42 +08:00
parent 6d780a4b03
commit d88a9b920a

View File

@ -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<Response, TileError> {
// 异步读取文件
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;