From 6311b9080777065c14dced0ec5faea5bc8d0e79b Mon Sep 17 00:00:00 2001 From: dvkt Date: Thu, 26 Dec 2019 22:01:28 -0800 Subject: [PATCH] send files --- src/server.rs | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/server.rs b/src/server.rs index 9390f9a..2b20744 100644 --- a/src/server.rs +++ b/src/server.rs @@ -5,7 +5,6 @@ use async_std::{ prelude::*, task, }; -use content_inspector::{inspect, ContentType}; use std::path::PathBuf; type Result = std::result::Result>; @@ -43,17 +42,15 @@ async fn respond(stream: &mut TcpStream, selector: &str, root: &str) -> Result<( let md = fs::metadata(path.clone()).await?; if md.is_file() { - let mut f = fs::File::open(path).await?; - let mut buf = [0; 1024]; - let mut bytes = md.len(); - while bytes > 0 { - let n = f.read(&mut buf[..]).await?; - bytes -= n as u64; - stream.write_all(&buf).await?; - } - return Ok(()); + return send_text(stream, path).await; + } else if md.is_dir() { + return send_dir(stream, path).await; + } else { + Ok(()) } +} +async fn send_dir(stream: &mut TcpStream, path: PathBuf) -> Result<()> { let mut response = String::new(); let mut dir = fs::read_dir(path.clone()).await?; @@ -70,6 +67,19 @@ async fn respond(stream: &mut TcpStream, selector: &str, root: &str) -> Result<( Ok(()) } +async fn send_text(stream: &mut TcpStream, path: PathBuf) -> Result<()> { + let md = fs::metadata(path.clone()).await?; + let mut f = fs::File::open(path).await?; + let mut buf = [0; 1024]; + let mut bytes = md.len(); + while bytes > 0 { + let n = f.read(&mut buf[..]).await?; + bytes -= n as u64; + stream.write_all(&buf).await?; + } + Ok(()) +} + async fn file_type(dir: &fs::DirEntry) -> char { if let Ok(metadata) = dir.metadata().await { if metadata.is_file() {