diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2022-10-20 10:35:10 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2022-10-20 10:35:52 +0000 |
| commit | cee4a630f08b3863bee5a194164feb7a02f20bda (patch) | |
| tree | dfdec60137ac7184f9732f5256ab78c5b3b82b6b | |
| parent | bf6feab9cac0bbf54607ba3401a5116440abcf85 (diff) | |
| parent | 7cb7aa914688f05993efd6c3fed12bc8ede64380 (diff) | |
| -rw-r--r-- | src/files.rs | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/files.rs b/src/files.rs index 380c3bf..cf185a2 100644 --- a/src/files.rs +++ b/src/files.rs @@ -3,7 +3,7 @@ use axum::{ extract::{Multipart, Path}, http::header::{HeaderMap, HeaderName, HeaderValue}, }; -use std::fs; +use std::{fs, path}; use rand::random; @@ -29,19 +29,28 @@ pub async fn upload( .iter() .any(|&x| x.to_lowercase() == ext_name) { - let name = match filename { + let mut name = match filename { Some(name) => name, None => (random::<f32>() * 1000000000 as f32).to_string(), }; - let save_filename = format!("{}/{}.{}", CONFIG.save_file_base_path, name, ext_name); - uploaded_file = format!("{}/{}.{}", CONFIG.uploads_endpoint, name, ext_name); + loop { + let save_filename = format!("{}/{}.{}", CONFIG.save_file_base_path, name, ext_name); - let data = file.bytes().await.unwrap(); + if path::Path::exists(&path::Path::new(&save_filename)) { + name = (random::<f32>() * 1000000000 as f32).to_string(); + continue; + } - tokio::fs::write(&save_filename, &data) - .await - .map_err(|err| err.to_string())?; + uploaded_file = format!("{}/{}.{}", CONFIG.uploads_endpoint, name, ext_name); + + let data = file.bytes().await.unwrap(); + + tokio::fs::write(&save_filename, &data) + .await + .map_err(|err| err.to_string())?; + break; + } } } |
