use crate::state::ReqState; use axum::{ body::StreamBody, extract::{Path, State}, response::IntoResponse, }; use hyper::StatusCode; use tokio_util::io::ReaderStream; pub async fn get(State(state): ReqState, Path(id): Path) -> impl IntoResponse { if id.len() < 8 { return Err(StatusCode::NOT_FOUND); } let id = id[..8].to_string(); let path = state.files_dir.join(id.clone()); if path.exists() { let file = tokio::fs::File::open(path) .await .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; let stream = ReaderStream::new(file); let body = StreamBody::new(stream); Ok(body) } else { Err(StatusCode::NOT_FOUND) } }