From f3c3892774f54ca7c07c2cc39df4e6c9e137858d Mon Sep 17 00:00:00 2001 From: JMARyA Date: Tue, 4 Mar 2025 19:19:21 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=EF=B8=8F=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/request/assets.rs | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/request/assets.rs b/src/request/assets.rs index 1a1691f..22d4ef6 100644 --- a/src/request/assets.rs +++ b/src/request/assets.rs @@ -5,7 +5,6 @@ use rocket::http::Header; use rocket::http::Status; use rocket::response::Responder; use std::io::Cursor; -use std::io::Read; use std::os::unix::fs::FileExt; use std::os::unix::fs::MetadataExt; @@ -54,16 +53,13 @@ impl Data { } } - pub fn full(self) -> Vec { + pub fn full(self) -> Result, tokio::fs::File> { if let Some(raw) = self.raw { - raw + Ok(raw) } else { - let mut buf = Vec::with_capacity(self.len()); - std::fs::File::open(self.file.unwrap()) - .unwrap() - .read_to_end(&mut buf) - .unwrap(); - return buf; + let file = std::fs::File::open(self.file.unwrap()).unwrap(); + let file = tokio::fs::File::from_std(file); + return Err(file); } } } @@ -166,12 +162,23 @@ impl<'r> Responder<'r, 'static> for DataResponse { |duration| Header::new("Cache-Control", format!("public, max-age={duration}")), ); - Ok(Response::build() - .header(cache_control_header) - .header(Header::new("Accept-Ranges", "bytes")) - .header(Header::new("Content-Type", self.content_type)) - .streamed_body(Cursor::new(self.data.full())) - .finalize()) + let data_full = self.data.full(); + + if let Ok(raw) = data_full { + Ok(Response::build() + .header(cache_control_header) + .header(Header::new("Accept-Ranges", "bytes")) + .header(Header::new("Content-Type", self.content_type)) + .streamed_body(Cursor::new(raw)) + .finalize()) + } else { + Ok(Response::build() + .header(cache_control_header) + .header(Header::new("Accept-Ranges", "bytes")) + .header(Header::new("Content-Type", self.content_type)) + .streamed_body(data_full.unwrap_err()) + .finalize()) + } } }