diff options
author | Adam T. Carpenter <atc@53hor.net> | 2020-11-04 08:59:41 -0500 |
---|---|---|
committer | Adam T. Carpenter <atc@53hor.net> | 2020-11-04 08:59:41 -0500 |
commit | 76ad709e0afed734c4331ddb8de91745a541a67d (patch) | |
tree | be7b3d20387506ed23fa9c4f4f386ef3bbb1ae86 /dichroism/src | |
parent | dcc96d0b349583e5d6a0f25ae1f7a3ffa3769788 (diff) | |
download | theglassyladies-76ad709e0afed734c4331ddb8de91745a541a67d.tar.xz theglassyladies-76ad709e0afed734c4331ddb8de91745a541a67d.zip |
basic photo upload working completely
Diffstat (limited to 'dichroism/src')
-rw-r--r-- | dichroism/src/handlers.rs | 14 | ||||
-rw-r--r-- | dichroism/src/main.rs | 17 |
2 files changed, 20 insertions, 11 deletions
diff --git a/dichroism/src/handlers.rs b/dichroism/src/handlers.rs index 43c11d2..ccaf347 100644 --- a/dichroism/src/handlers.rs +++ b/dichroism/src/handlers.rs @@ -106,17 +106,15 @@ async fn post_photo( ) -> Result<HttpResponse, Error> { let mut responses: Vec<PhotoSetGet> = Vec::new(); - if let Ok(Some(mut field)) = payload.try_next().await { - // bail if a non-JPEG file was going to be uploaded - if field.content_type() != &mime::IMAGE_JPEG { - return Ok(HttpResponse::BadRequest().body("File must be a JPEG image.")); - } - + while let Some(mut field) = payload + .try_next() + .await + .map_err(|e| HttpResponse::BadRequest().body(e.to_string()))? + { // grab all bytes let mut data: Vec<u8> = Vec::new(); while let Some(chunk) = field.next().await { - let chunk = chunk?; - data.extend(chunk); + data.extend(chunk?); } // create new photo_set diff --git a/dichroism/src/main.rs b/dichroism/src/main.rs index 68b7091..6c76f0a 100644 --- a/dichroism/src/main.rs +++ b/dichroism/src/main.rs @@ -3,7 +3,8 @@ extern crate serde; #[macro_use] extern crate diesel; -use actix_web::{App, HttpServer}; +use actix_cors::Cors; +use actix_web::{middleware::Logger, App, HttpServer}; use config::CONFIG_INSTANCE as CONFIG; use diesel::prelude::SqliteConnection; use diesel::r2d2::ConnectionManager; @@ -25,18 +26,28 @@ mod types; #[actix_web::main] async fn main() -> Result<()> { - // Initialize DB connection pool. + // Init logging + std::env::set_var("RUST_LOG", "actix_web=info"); + env_logger::init(); + + // Init DB connection pool let manager = ConnectionManager::<SqliteConnection>::new(&CONFIG.db_url); let pool = Pool::builder().build(manager)?; - // Initialize application server. + // Init application server let mut server = HttpServer::new(move || { + // Init CORS policy + let cors = Cors::permissive(); + App::new() .data(pool.clone()) + .wrap(cors) + .wrap(Logger::default()) .service(handlers::hello) .service(handlers::get_products) .service(handlers::patch_product) .service(handlers::post_product) + .service(handlers::post_photo) }); // If using listenfd, bind to it instead of the configured address to allow for cargo watch |