some basics for a rust server

This commit is contained in:
Chris Cochrun 2023-06-15 07:20:50 -05:00
parent fce79269e1
commit 27d2e51160

View file

@ -1,6 +1,7 @@
use actix_multipart::{
form::{
tempfile::{TempFile, TempFileConfig},
text::Text,
MultipartForm,
},
Multipart,
@ -10,12 +11,14 @@ use actix_web::{middleware, post, web, App, Error, HttpResponse, HttpServer, Res
use futures_util::StreamExt as _;
use std::{env, io};
// #[derive(Debug, MultipartForm)]
// struct HealthForm {
// firstname: String,
// lastname: String,
// birthdate: String,
// }
#[derive(Debug, MultipartForm)]
struct HealthForm {
#[multipart(rename = "file")]
files: Vec<TempFile>,
firstname: Text<String>,
lastname: Text<String>,
birthdate: Text<String>,
}
#[actix_web::main]
async fn main() -> io::Result<()> {
@ -35,37 +38,44 @@ async fn main() -> io::Result<()> {
.await
}
#[post("/health-form")]
async fn form(mut form: Multipart) -> Result<HttpResponse, Error> {
// println!("{form:?}");
while let Some(item) = form.next().await {
let mut field = item?;
// let mut value = "";
let name = field.name();
let content_type = field.content_type().unwrap().to_string();
if content_type == "application/octet-stream" {
// Handle file field
// You can save the file or process its contents here
while let Some(chunk) = field.try_next().await? {
// Process file chunk
}
} else {
// Handle other field types (e.g., text fields)
let field_value = field
.try_next()
.await?
.expect("Field value not found")
.to_utf8()
.expect("Failed to decode field value as UTF-8");
// #[post("/health-form")]
// async fn form(mut form: Multipart) -> Result<HttpResponse, Error> {
// // println!("{form:?}");
// while let Some(item) = form.next().await {
// let mut field = item?;
// // let mut value = "";
// let name = field.name();
// let content_type = field.content_type().unwrap().to_string();
// if content_type == "application/octet-stream" {
// // Handle file field
// // You can save the file or process its contents here
// while let Some(chunk) = field.next().await {
// // Process file chunk
// println!("chunk: {:?}", std::str::from_utf8(&chunk?));
// }
// } else {
// // Handle other field types (e.g., text fields)
// let field_value = field
// .next()
// .await
// .expect("Field value not found")
// .expect("Field value not found");
// Process the field value (e.g., store in a database, perform validation, etc.)
println!("Field {}: {}", name, field_value);
}
// while let Some(chunk) = field.try_next().await {
// let value = std::str::from_utf8(&chunk?).unwrap();
// println!("{:?}: {:?}", name, value);
// }
}
// // Process the field value (e.g., store in a database, perform validation, etc.)
// println!("Field {:?}: {:?}", name, field_value);
// }
// // while let Some(chunk) = field.try_next().await {
// // let value = std::str::from_utf8(&chunk?).unwrap();
// // println!("{:?}: {:?}", name, value);
// // }
// }
// Ok(HttpResponse::Ok().into())
// }
#[post("/health-form")]
async fn form(form: MultipartForm<HealthForm>) -> Result<HttpResponse, Error> {
println!("{:?}", form.firstname);
println!("{:?}", form.lastname);
Ok(HttpResponse::Ok().into())
}