From d14e17d94964291fda976423c1fe1a772d5af60b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Pej=C5=A1a?= Date: Wed, 27 Mar 2019 09:44:29 +0100 Subject: Add CLI arguments for file uploading. --- src/file_upload.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/file_upload.rs') diff --git a/src/file_upload.rs b/src/file_upload.rs index dd4c962..9f87724 100644 --- a/src/file_upload.rs +++ b/src/file_upload.rs @@ -20,7 +20,11 @@ struct QueryParameters { fn save_file( field: multipart::Field, file_path: PathBuf, + override_files: bool, ) -> Box> { + if !override_files && file_path.exists() { + return Box::new(future::err(error::ErrorInternalServerError("file exists"))); + } let mut file = match std::fs::File::create(file_path) { Ok(file) => file, Err(e) => return Box::new(future::err(error::ErrorInternalServerError(e))), @@ -42,6 +46,7 @@ fn save_file( fn handle_multipart( item: multipart::MultipartItem, mut file_path: PathBuf, + override_files: bool, ) -> Box> { match item { multipart::MultipartItem::Field(field) => { @@ -60,15 +65,14 @@ fn handle_multipart( match filename { Ok(f) => { file_path = file_path.join(f); - // TODO should I allow overriding existing files? - Box::new(save_file(field, file_path).into_stream()) + Box::new(save_file(field, file_path, override_files).into_stream()) } Err(e) => Box::new(e.into_stream()), } } multipart::MultipartItem::Nested(mp) => Box::new( mp.map_err(error::ErrorInternalServerError) - .map(move |item| handle_multipart(item, file_path.clone())) + .map(move |item| handle_multipart(item, file_path.clone(), override_files)) .flatten(), ), } @@ -101,10 +105,11 @@ pub fn upload_file(req: &HttpRequest) -> FutureResponse< Ok(path) if path.starts_with(&app_root_dir) => path.clone(), _ => return Box::new(future::ok(HttpResponse::BadRequest().body("Invalid path"))), }; + let override_files = req.state().override_files; Box::new( req.multipart() .map_err(error::ErrorInternalServerError) - .map(move |item| handle_multipart(item, target_dir.clone())) + .map(move |item| handle_multipart(item, target_dir.clone(), override_files)) .flatten() .collect() .map(move |_| { -- cgit v1.2.3