From dec9b3d38a705686663f07495fd3a468f69595c4 Mon Sep 17 00:00:00 2001 From: Untone Date: Wed, 2 Oct 2024 20:05:47 +0300 Subject: [PATCH] keep-ext --- src/handlers.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/handlers.rs b/src/handlers.rs index 270812f..3cb5edc 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -20,8 +20,7 @@ pub const MAX_WEEK_BYTES: u64 = 2 * 1024 * 1024 * 1024; async fn serve_file(file_key: &str, state: &AppState) -> Result { // Проверяем наличие файла в Storj S3 if !check_file_exists(&state.s3_client, &state.s3_bucket, file_key).await? { - warn!("Файл не найден в S3: {}", file_key); - return Ok(HttpResponse::NotFound().finish()); + return Err(ErrorInternalServerError("File not found in S3")); } let checked_filekey = state.get_path(file_key).await.unwrap().unwrap(); @@ -62,7 +61,7 @@ pub async fn upload_handler( .get("Authorization") .and_then(|header_value| header_value.to_str().ok()); if token.is_none() { - return Err(actix_web::error::ErrorUnauthorized("Unauthorized")); // Если токен отстствует, возвращаем ошибку + return Err(actix_web::error::ErrorUnauthorized("Unauthorized")); // Если токен отсутствует, возвращаем ошибку } let user_id = get_id_by_token(token.unwrap()).await?; @@ -96,7 +95,7 @@ pub async fn upload_handler( // Квота превышена } - // Инкреметируем квоту пользователя + // инкрементируем квоту пользователя let _ = state.increment_uploaded_bytes(&user_id, file_size).await?; // Определяем правильное расширение и ключ для S3 @@ -147,12 +146,15 @@ pub async fn proxy_handler( })?; info!("Имя файла с расширением: {}", filename_with_extension); - // убираем расширение файла - let requested_filekey = filename_with_extension + // Разделяем имя и расширение файла, сохраняя их для дальнейшего использования + let (requested_filekey, extension) = filename_with_extension .rsplit_once('.') - .map(|(name, _ext)| name) - .unwrap_or(filename_with_extension); + .map(|(name, ext)| (name.to_string(), Some(ext.to_lowercase()))) + .unwrap_or((filename_with_extension.to_string(), None)); info!("Запрошенный ключ файла: {}", requested_filekey); + if let Some(ext) = &extension { + info!("Расширение файла: {}", ext); + } // Проверяем, запрошена ли миниатюра if let Some((base_filename, requested_width, _ext)) = @@ -160,7 +162,7 @@ pub async fn proxy_handler( { info!("Запрошена миниатюра. Базовое имя файла: {}, Запрошенная ширина: {}", base_filename, requested_width); - // аходим ближайший подходящий размер + // Находим ближайший подходящий размер let closest_width = find_closest_width(requested_width); let thumbnail_key = format!("{}_{}", base_filename, closest_width); info!("Ближайшая ширина: {}, Кюч миниатюры: {}", closest_width, thumbnail_key);