diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/file_op.rs | 17 |
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()), ), |