summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/files.rs25
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;
+ }
}
}