sync
This commit is contained in:
parent
6d780a4b03
commit
d88a9b920a
27
src/main.rs
27
src/main.rs
@ -25,6 +25,7 @@ async fn main() {
|
|||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/", get(root))
|
.route("/", get(root))
|
||||||
.route("/tiles/{z}/{x}/{y}", get(get_tile))
|
.route("/tiles/{z}/{x}/{y}", get(get_tile))
|
||||||
|
.route("/test", get(get_test))
|
||||||
.layer(cors); // 使用配置好的CORS
|
.layer(cors); // 使用配置好的CORS
|
||||||
|
|
||||||
// 启动服务器,监听端口 3050
|
// 启动服务器,监听端口 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
|
// 生成简单的 ETag
|
||||||
fn generate_etag(path: &str) -> String {
|
fn generate_etag(path: &str) -> String {
|
||||||
use std::collections::hash_map::DefaultHasher;
|
use std::collections::hash_map::DefaultHasher;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user