38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
mod app_state;
|
||
mod auth;
|
||
mod handlers;
|
||
mod s3_utils;
|
||
mod thumbnail;
|
||
|
||
use actix_web::{middleware::Logger, web, App, HttpServer};
|
||
use app_state::AppState;
|
||
use handlers::{proxy_handler, upload_handler};
|
||
use tokio::task::spawn_blocking;
|
||
|
||
#[actix_web::main]
|
||
async fn main() -> std::io::Result<()> {
|
||
let app_state = AppState::new().await;
|
||
|
||
let app_state_clone = app_state.clone();
|
||
|
||
// Используем spawn_blocking для работы, которая не совместима с Send
|
||
spawn_blocking(move || {
|
||
let rt = tokio::runtime::Handle::current();
|
||
rt.block_on(async move {
|
||
app_state_clone.update_filelist_from_aws().await;
|
||
app_state_clone.refresh_file_list_periodically().await;
|
||
});
|
||
});
|
||
|
||
HttpServer::new(move || {
|
||
App::new()
|
||
.app_data(web::Data::new(app_state.clone()))
|
||
.wrap(Logger::default())
|
||
.route("/{path:.*}", web::get().to(proxy_handler))
|
||
.route("/", web::post().to(upload_handler))
|
||
})
|
||
.bind("127.0.0.1:8080")?
|
||
.run()
|
||
.await
|
||
}
|