Skip to content

Commit b7ecc8b

Browse files
committed
feat: basic features support completed and style improving
1 parent fce51de commit b7ecc8b

File tree

7 files changed

+213
-223
lines changed

7 files changed

+213
-223
lines changed

server/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/Cargo.toml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@ rust-embed = "8.7.2"
1010
tokio = { version = "1.47.1", features = ["full"] }
1111
tracing = "0.1.41"
1212
tracing-subscriber = "0.3.20"
13-
tower-http = { version = "0.6.6", features = ["fs"] }
13+
tower-http = { version = "0.6.6", features = ["fs", "timeout"] }
1414
lazy_static = "1.5.0"
1515
serde_json = "1.0.143"
1616
serde = { version = "1.0.219", features = ["derive"] }
1717
tokio-stream = "0.1.17"
1818
futures = "0.3.31"
1919
async-stream = "0.3.6"
20+
mime_guess = "2.0.5"
2021

2122
[profile.release]
22-
opt-level = 2
23+
opt-level = "z"
2324
lto = true
24-
strip = true
25+
strip = true
26+
panic = "abort"

server/src/db.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ impl AccessCode {
2727
#[derive(Clone)]
2828
pub struct FileBlock {
2929
pub data: Bytes,
30-
pub is_final: bool,
3130
pub filename: String,
3231
pub start: u64,
3332
pub end: u64,
@@ -39,10 +38,9 @@ impl FileBlock {
3938
FILE_BLOCK_DB.clone()
4039
}
4140

42-
pub fn new(data: &Bytes, is_final: bool, filename: String, start: u64, end: u64, total: u64) -> Self {
41+
pub fn new(data: &Bytes, filename: String, start: u64, end: u64, total: u64) -> Self {
4342
FileBlock {
4443
data: data.clone(),
45-
is_final,
4644
filename,
4745
start,
4846
end,

server/src/main.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
1-
use tracing::event;
2-
use tracing_subscriber;
3-
use anyhow::Result;
1+
use tracing::{event, Level};
42

3+
mod db;
4+
mod router;
55
mod service;
66
mod utils;
7-
mod router;
8-
mod db;
97

108
#[tokio::main]
11-
async fn main() -> Result<()> {
12-
tracing_subscriber::fmt()
9+
async fn main() {
10+
tracing_subscriber::fmt()
1311
.with_thread_ids(false)
1412
.with_target(false)
1513
.with_line_number(false)
1614
.init();
17-
18-
event!(tracing::Level::INFO, "server started");
19-
router::start_server("0.0.0.0", "5000").await;
2015

21-
Ok(())
16+
event!(Level::INFO, "server started");
17+
18+
router::start_server("0.0.0.0", "5000").await;
2219
}

server/src/router.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
use axum::{routing::{get, post}, serve, Router};
22
use tokio::net::{TcpListener};
3+
use tower_http::timeout::TimeoutLayer;
34
use tracing::{event, instrument};
5+
use std::time::Duration;
46

5-
use crate::service::handler::{download, get_file, get_id, get_status, upload, upload_file};
7+
use crate::service::handler::{download, get_assets, get_file, get_id, get_status, upload, upload_file};
8+
use tower_http::services::ServeDir;
69

710
fn api_router() -> Router {
811
Router::new()
912
.route("/hello", get(|| async { "Hi!" }))
1013
.route("/get_id", get(get_id))
1114
.route("/{id}/status", get(get_status))
15+
// Add timeout layer specifically for upload api
1216
.route("/{id}/upload", post(upload_file))
17+
.layer(TimeoutLayer::new(Duration::from_secs(20)))
18+
// Add timeout layer specifically for download api
1319
.route("/{id}/file", get(get_file))
20+
.layer(TimeoutLayer::new(Duration::from_secs(20)))
21+
}
22+
23+
fn assets_router() -> Router {
24+
Router::new()
25+
.route("/{path}", get(get_assets))
1426
}
1527

1628
fn view_router() -> Router {
@@ -24,9 +36,9 @@ pub async fn start_server(ip: &str, port: &str) {
2436
let app = Router::new()
2537
.merge(view_router())
2638
.nest("/api", api_router())
27-
.nest_service("/assets", axum::routing::get_service(
28-
tower_http::services::ServeDir::new("../web/dist/assets")
29-
));
39+
.nest("/assets", assets_router())
40+
// 添加静态文件服务,用于提供web/dist目录中的文件
41+
.fallback_service(ServeDir::new("../web/dist"));
3042

3143
let addr = format!("{}:{}", ip, port);
3244
let listener = match TcpListener::bind(&addr).await {
@@ -40,8 +52,6 @@ pub async fn start_server(ip: &str, port: &str) {
4052
event!(tracing::Level::INFO, "Server listening on {}", addr);
4153
match serve(listener, app).await {
4254
Ok(_) => {}
43-
Err(e) => {
44-
event!(tracing::Level::ERROR, "Server error: {}", e);
45-
}
46-
};
47-
}
55+
Err(e) => event!(tracing::Level::ERROR, "Server error: {}", e),
56+
}
57+
}

0 commit comments

Comments
 (0)