diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs index aed354a0..95c31609 100644 --- a/src/api/client_server/media.rs +++ b/src/api/client_server/media.rs @@ -250,7 +250,7 @@ async fn get_content_route_ruma( cross_origin_resource_policy: Some("cross-origin".to_owned()), }) } else { - Err(Error::BadRequest(ErrorKind::NotFound, "Media not found.")) + Err(Error::BadRequest(ErrorKind::NotYetUploaded, "Media not found.")) } } @@ -415,6 +415,6 @@ async fn get_content_thumbnail_route_ruma( cross_origin_resource_policy: Some("cross-origin".to_owned()), }) } else { - Err(Error::BadRequest(ErrorKind::NotFound, "Media not found.")) + Err(Error::BadRequest(ErrorKind::NotYetUploaded, "Media not found.")) } } diff --git a/src/service/media.rs b/src/service/media.rs index 91b5d135..052c726c 100644 --- a/src/service/media.rs +++ b/src/service/media.rs @@ -3,7 +3,7 @@ use std::io::Cursor; use image::imageops::FilterType; use tokio::{ fs::File, - io::{AsyncReadExt, AsyncWriteExt, BufReader}, + io::{AsyncReadExt, AsyncWriteExt}, }; use tracing::{debug, warn}; @@ -88,15 +88,17 @@ impl Service { self.db.search_file_metadata(mxc, 0, 0) { let path = services().globals.get_media_file(&key); - let mut file = Vec::new(); - BufReader::new(File::open(path).await?) - .read_to_end(&mut file) - .await?; + let mut file_data = Vec::new(); + let Ok(mut file) = File::open(path).await else { + return Ok(None); + }; + + file.read_to_end(&mut file_data).await?; Ok(Some(FileMeta { content_disposition, content_type, - file, + file: file_data, })) } else { Ok(None) diff --git a/src/utils/error.rs b/src/utils/error.rs index 776c1a3e..7b87b5f5 100644 --- a/src/utils/error.rs +++ b/src/utils/error.rs @@ -98,9 +98,9 @@ impl Error { pub(crate) fn to_response(&self) -> Ra { use ErrorKind::{ Forbidden, GuestAccessForbidden, LimitExceeded, MissingToken, - NotFound, ThreepidAuthFailed, ThreepidDenied, TooLarge, - Unauthorized, Unknown, UnknownToken, Unrecognized, UserDeactivated, - WrongRoomKeysVersion, + NotFound, NotYetUploaded, ThreepidAuthFailed, ThreepidDenied, + TooLarge, Unauthorized, Unknown, UnknownToken, Unrecognized, + UserDeactivated, WrongRoomKeysVersion, }; if let Self::Uiaa(uiaainfo) = self { @@ -142,6 +142,7 @@ impl Error { .. } => StatusCode::TOO_MANY_REQUESTS, TooLarge => StatusCode::PAYLOAD_TOO_LARGE, + NotYetUploaded => StatusCode::GATEWAY_TIMEOUT, _ => StatusCode::BAD_REQUEST, }, ),