diff --git a/src/routing/mock_upload.rs b/src/routing/mock_upload.rs index 8f171ef6c16d0ae4a6bb6d2dfa9854d88c530879..9ef566c74884c6d37874b919aaa622e3e74457ac 100644 --- a/src/routing/mock_upload.rs +++ b/src/routing/mock_upload.rs @@ -1,5 +1,5 @@ use rocket::{Data, State}; -use formdata::{read_formdata}; +use formdata::{read_formdata, FilePart}; use routing::request::ConvertedHeaders; use hyper::header::{Headers, ContentDisposition, DispositionParam}; use rocket::request::FromRequest; @@ -24,20 +24,9 @@ pub fn to_file(headers: ConvertedHeaders, conf: State<SwerveConfig>, upload: Dat create_dir("uploads"); for file in data.files { - let (name, value) = file; - if name == String::from("upload") { - let content_disposition = value.headers.get::<ContentDisposition>().unwrap(); - let file_name = filename_from_disposition(content_disposition); - - let mut input = File::open(value.path.clone()).unwrap(); - let mut output = OpenOptions::new() - .write(true) - .create(true) - .open(PathBuf::from("uploads").join(file_name.clone().unwrap_or(String::from("upload_data")))) - .unwrap(); - - copy(&mut input, &mut output).unwrap(); - println!("File written to {}", file_name.unwrap()); + match conf.file_handling { + HandlerMethod::Log => log_file(file), + HandlerMethod::File => upload_file(file), } } Ok(String::from("Complete")) @@ -55,6 +44,32 @@ fn collect_fields(fields: Vec<(String, String)>) -> HashMap<String, String> { map } +type Upload = (String, FilePart); + +fn upload_file(file: Upload) { + let (name, value) = file; + let content_disposition = value.headers.get::<ContentDisposition>().unwrap(); + let file_name = filename_from_disposition(content_disposition); + + let mut input = File::open(value.path.clone()).unwrap(); + let mut output = OpenOptions::new() + .write(true) + .create(true) + .open(PathBuf::from("uploads").join(file_name.clone().unwrap_or(String::from("upload_data")))) + .unwrap(); + + copy(&mut input, &mut output).unwrap(); + println!("File written to {}", file_name.unwrap()); +} + +fn log_file(file: Upload) { + let (name, value) = file; + println!("[UPLOAD] From field: {}. Size: {}", name, value.size.unwrap_or(0)); + for header in value.headers.iter() { + println!("[UPLOAD] :: {}; {}", header.name(), header.value_string()); + } +} + fn filename_from_disposition(dispo: &ContentDisposition) -> Option<String> { for param in dispo.parameters.iter() { if let &DispositionParam::Filename(_, _, ref name_vec) = param {