From 570e061782a01702ccc9944392ca581ed74a36d4 Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Sun, 21 Sep 2025 11:01:20 +0700 Subject: [PATCH] add image --- model/RBD Model/Image/CMN-CL.png | Bin 0 -> 9622 bytes model/structure_name.json | 315 ++++++++++++++++++++----------- src/aeros_simulation/model.py | 1 + src/aeros_simulation/schema.py | 1 + src/aeros_simulation/service.py | 11 +- src/main.py | 15 +- 6 files changed, 235 insertions(+), 108 deletions(-) create mode 100644 model/RBD Model/Image/CMN-CL.png diff --git a/model/RBD Model/Image/CMN-CL.png b/model/RBD Model/Image/CMN-CL.png new file mode 100644 index 0000000000000000000000000000000000000000..e7206367e61519925465cdf9a311a34a6ec4275e GIT binary patch literal 9622 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 z Response: @@ -115,4 +117,15 @@ async def add_security_headers(request: Request, call_next): # app.add_middleware(ExceptionMiddleware) +@app.get("/images/{image_path:path}") +async def get_image(image_path: str = Path(...)): + # Extract filename from the full path + filename = os.path.basename(image_path) + full_image_path = f"model/RBD Model/Image/{filename}" + + if os.path.exists(full_image_path): + return FileResponse(full_image_path) + else: + raise HTTPException(status_code=404, detail="Image not found") + app.include_router(api_router)