keep-ext
All checks were successful
deploy / deploy (push) Successful in 1m1s

This commit is contained in:
Untone 2024-10-02 20:05:47 +03:00
parent 2c535e9848
commit dec9b3d38a

View File

@ -20,8 +20,7 @@ pub const MAX_WEEK_BYTES: u64 = 2 * 1024 * 1024 * 1024;
async fn serve_file(file_key: &str, state: &AppState) -> Result<HttpResponse, actix_web::Error> { async fn serve_file(file_key: &str, state: &AppState) -> Result<HttpResponse, actix_web::Error> {
// Проверяем наличие файла в Storj S3 // Проверяем наличие файла в Storj S3
if !check_file_exists(&state.s3_client, &state.s3_bucket, file_key).await? { if !check_file_exists(&state.s3_client, &state.s3_bucket, file_key).await? {
warn!("Файл не найден в S3: {}", file_key); return Err(ErrorInternalServerError("File not found in S3"));
return Ok(HttpResponse::NotFound().finish());
} }
let checked_filekey = state.get_path(file_key).await.unwrap().unwrap(); let checked_filekey = state.get_path(file_key).await.unwrap().unwrap();
@ -62,7 +61,7 @@ pub async fn upload_handler(
.get("Authorization") .get("Authorization")
.and_then(|header_value| header_value.to_str().ok()); .and_then(|header_value| header_value.to_str().ok());
if token.is_none() { 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?; 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?; let _ = state.increment_uploaded_bytes(&user_id, file_size).await?;
// Определяем правильное расширение и ключ для S3 // Определяем правильное расширение и ключ для S3
@ -147,12 +146,15 @@ pub async fn proxy_handler(
})?; })?;
info!("Имя файла с расширением: {}", filename_with_extension); info!("Имя файла с расширением: {}", filename_with_extension);
// убираем расширение файла // Разделяем имя и расширение файла, сохраняя их для дальнейшего использования
let requested_filekey = filename_with_extension let (requested_filekey, extension) = filename_with_extension
.rsplit_once('.') .rsplit_once('.')
.map(|(name, _ext)| name) .map(|(name, ext)| (name.to_string(), Some(ext.to_lowercase())))
.unwrap_or(filename_with_extension); .unwrap_or((filename_with_extension.to_string(), None));
info!("Запрошенный ключ файла: {}", requested_filekey); info!("Запрошенный ключ файла: {}", requested_filekey);
if let Some(ext) = &extension {
info!("Расширение файла: {}", ext);
}
// Проверяем, запрошена ли миниатюра // Проверяем, запрошена ли миниатюра
if let Some((base_filename, requested_width, _ext)) = if let Some((base_filename, requested_width, _ext)) =
@ -160,7 +162,7 @@ pub async fn proxy_handler(
{ {
info!("Запрошена миниатюра. Базовое имя файла: {}, Запрошенная ширина: {}", base_filename, requested_width); info!("Запрошена миниатюра. Базовое имя файла: {}, Запрошенная ширина: {}", base_filename, requested_width);
// аходим ближайший подходящий размер // Находим ближайший подходящий размер
let closest_width = find_closest_width(requested_width); let closest_width = find_closest_width(requested_width);
let thumbnail_key = format!("{}_{}", base_filename, closest_width); let thumbnail_key = format!("{}_{}", base_filename, closest_width);
info!("Ближайшая ширина: {}, Кюч миниатюры: {}", closest_width, thumbnail_key); info!("Ближайшая ширина: {}, Кюч миниатюры: {}", closest_width, thumbnail_key);