mirror of https://github.com/ivanch/tcc.git
add actix
This commit is contained in:
parent
aa4b1e9709
commit
2f91c3636f
|
@ -9,6 +9,7 @@ dependencies = [
|
|||
"actix-files",
|
||||
"actix-web",
|
||||
"magick_rust",
|
||||
"qstring",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -299,9 +300,9 @@ checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
|
|||
|
||||
[[package]]
|
||||
name = "bindgen"
|
||||
version = "0.66.1"
|
||||
version = "0.68.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
|
||||
checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078"
|
||||
dependencies = [
|
||||
"bitflags 2.4.0",
|
||||
"cexpr",
|
||||
|
@ -785,9 +786,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
|||
|
||||
[[package]]
|
||||
name = "magick_rust"
|
||||
version = "0.19.0"
|
||||
version = "0.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce666df6ace809001c625ad383f4727657c7c7881df43b3b71486e8e9f07d017"
|
||||
checksum = "c912b69250bcd5d024852a1a75c567d3b5d881871a55b741018741632a921bf8"
|
||||
dependencies = [
|
||||
"bindgen",
|
||||
"libc",
|
||||
|
@ -952,6 +953,15 @@ dependencies = [
|
|||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "qstring"
|
||||
version = "0.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e"
|
||||
dependencies = [
|
||||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.33"
|
||||
|
|
|
@ -8,4 +8,5 @@ edition = "2021"
|
|||
[dependencies]
|
||||
actix-web = "4"
|
||||
actix-files = "0.6.2"
|
||||
magick_rust = "0.19.0"
|
||||
magick_rust = "0.19.1"
|
||||
qstring = "0.7.2"
|
||||
|
|
|
@ -16,10 +16,19 @@ RUN cargo build --release
|
|||
|
||||
FROM debian:bullseye-slim
|
||||
|
||||
ENV MAGICK_VERSION 7.1
|
||||
|
||||
RUN curl https://imagemagick.org/archive/ImageMagick.tar.gz | tar xz \
|
||||
&& cd ImageMagick-${MAGICK_VERSION}* \
|
||||
&& ./configure --with-magick-plus-plus=no --with-perl=no \
|
||||
&& make \
|
||||
&& make install \
|
||||
&& cd .. \
|
||||
&& rm -r ImageMagick-${MAGICK_VERSION}*
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=build-env /app/target/release .
|
||||
|
||||
COPY --from=build-env /app/static ./static
|
||||
|
||||
ENTRYPOINT ["./ActixAPI"]
|
||||
|
|
|
@ -1,22 +1,13 @@
|
|||
use qstring::QString;
|
||||
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder, HttpRequest, Result};
|
||||
use actix_files::NamedFile;
|
||||
use magick_rust::{MagickWand, ToMagick};
|
||||
use magick_rust::{self, FilterType};
|
||||
use magick_rust::MagickWand;
|
||||
|
||||
#[get("/status/ok")]
|
||||
async fn hello() -> impl Responder {
|
||||
HttpResponse::Ok().body("{\"status\": 200}")
|
||||
}
|
||||
|
||||
#[post("/echo")]
|
||||
async fn echo(req_body: String) -> impl Responder {
|
||||
HttpResponse::Ok().body(req_body)
|
||||
}
|
||||
|
||||
async fn manual_hello() -> impl Responder {
|
||||
HttpResponse::Ok().body("Hey there!")
|
||||
}
|
||||
|
||||
async fn static_serve(req: HttpRequest) -> Result<NamedFile> {
|
||||
let path: &str = req.path();
|
||||
let real_path = &path[1..];
|
||||
|
@ -24,19 +15,39 @@ async fn static_serve(req: HttpRequest) -> Result<NamedFile> {
|
|||
Ok(NamedFile::open(real_path)?)
|
||||
}
|
||||
|
||||
#[get("/image/load-small-image")]
|
||||
async fn load_small_image() -> Result<NamedFile> {
|
||||
let real_path = "static/small-image.png";
|
||||
|
||||
Ok(NamedFile::open(real_path)?)
|
||||
}
|
||||
|
||||
#[get("/image/load-big-image")]
|
||||
async fn load_big_image() -> Result<NamedFile> {
|
||||
let real_path = "static/big-image.png";
|
||||
|
||||
Ok(NamedFile::open(real_path)?)
|
||||
}
|
||||
|
||||
#[post("/image/blur")]
|
||||
async fn blur_image(image_data: web::Bytes) -> Result<HttpResponse> {
|
||||
async fn blur_image(image_data: web::Bytes, req: HttpRequest) -> Result<HttpResponse> {
|
||||
// Load the image from the incoming bytes
|
||||
let image = ToMagick::<magick_rust::MagickWand>::to_magick(image_data).unwrap();
|
||||
let mut wand = MagickWand::new();
|
||||
wand.read_image_blob(&image_data).unwrap();
|
||||
|
||||
// Apply a blur filter to the image
|
||||
let blurred_image = image.blur(FilterType::Gaussian, 0.0).unwrap();
|
||||
let query_str = req.query_string();
|
||||
let qs = QString::from(query_str);
|
||||
let radius = qs.get("radius").unwrap_or("5").parse::<f64>().unwrap_or(5.0);
|
||||
|
||||
// Convert the blurred image back to bytes
|
||||
let blurred_image_bytes = blurred_image.to_bytes().unwrap();
|
||||
// Blur the image
|
||||
wand.blur_image(radius, radius).unwrap();
|
||||
|
||||
// Convert the image back to bytes
|
||||
let blurred_image_bytes = wand.write_image_blob("png").unwrap();
|
||||
|
||||
// Return the blurred image bytes
|
||||
Ok(HttpResponse::Ok()
|
||||
.content_type("image/jpeg")
|
||||
.content_type("image/png")
|
||||
.body(blurred_image_bytes))
|
||||
}
|
||||
|
||||
|
@ -48,11 +59,11 @@ async fn main() -> std::io::Result<()> {
|
|||
App::new()
|
||||
.route("/static/{filename:.*}", web::get().to(static_serve))
|
||||
.service(hello)
|
||||
.service(echo)
|
||||
.service(load_small_image)
|
||||
.service(load_big_image)
|
||||
.service(blur_image)
|
||||
.route("/hey", web::get().to(manual_hello))
|
||||
})
|
||||
.bind(("0.0.0.0", 9090))?
|
||||
.bind(("0.0.0.0", 5000))?
|
||||
.run()
|
||||
.await
|
||||
}
|
|
@ -31,7 +31,7 @@ services:
|
|||
build: ./ActixAPI
|
||||
restart: always
|
||||
ports:
|
||||
- "9083:9090"
|
||||
- "9083:5000"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
|
|
Loading…
Reference in New Issue