aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/file_op.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/file_op.rs b/src/file_op.rs
index 6537182..760b23e 100644
--- a/src/file_op.rs
+++ b/src/file_op.rs
@@ -1,14 +1,14 @@
//! Handlers for file upload and removal
use std::io::ErrorKind;
-use std::{
- io::Write,
- path::{Component, Path, PathBuf},
-};
+use std::path::{Component, Path, PathBuf};
use actix_web::{http::header, web, HttpRequest, HttpResponse};
+use futures::TryFutureExt;
use futures::TryStreamExt;
use serde::Deserialize;
+use tokio::fs::File;
+use tokio::io::AsyncWriteExt;
use crate::{
config::MiniserveConfig, errors::ContextualError, file_utils::contains_symlink,
@@ -28,7 +28,7 @@ async fn save_file(
return Err(ContextualError::DuplicateFileError);
}
- let file = match std::fs::File::create(&file_path) {
+ let file = match File::create(&file_path).await {
Err(err) if err.kind() == ErrorKind::PermissionDenied => Err(
ContextualError::InsufficientPermissionsError(file_path.display().to_string()),
),
@@ -43,7 +43,8 @@ async fn save_file(
.map_err(|x| ContextualError::MultipartError(x.to_string()))
.try_fold((file, 0u64), |(mut file, written_len), bytes| async move {
file.write_all(bytes.as_ref())
- .map_err(|e| ContextualError::IoError("Failed to write to file".to_string(), e))?;
+ .map_err(|e| ContextualError::IoError("Failed to write to file".to_string(), e))
+ .await?;
Ok((file, written_len + bytes.len() as u64))
})
.await?;
@@ -62,7 +63,7 @@ async fn handle_multipart(
) -> Result<u64, ContextualError> {
let field_name = field.name().to_string();
- match std::fs::metadata(&path) {
+ match tokio::fs::metadata(&path).await {
Err(_) => Err(ContextualError::InsufficientPermissionsError(
path.display().to_string(),
)),
@@ -132,7 +133,7 @@ async fn handle_multipart(
}
}
- return match std::fs::create_dir_all(&absolute_path) {
+ return match tokio::fs::create_dir_all(&absolute_path).await {
Err(err) if err.kind() == ErrorKind::PermissionDenied => Err(
ContextualError::InsufficientPermissionsError(path.display().to_string()),
),