diff --git a/README.md b/README.md index 11fb838..c7abaab 100644 --- a/README.md +++ b/README.md @@ -17,3 +17,6 @@ mit folgender URL im Browser ist der Einstiegpunkt: http://127.0.0.1:8001/static/upload.html +Ein Viewer für die hochgeladenen STEP files +http://127.0.0.1:8001/static/viewer.html + diff --git a/main.py b/main.py index f915f6e..bf7a54f 100644 --- a/main.py +++ b/main.py @@ -1,17 +1,58 @@ -from fastapi import FastAPI +import os +import tempfile +import uuid + +from fastapi import FastAPI, UploadFile, File, HTTPException from fastapi.staticfiles import StaticFiles +from fastapi.middleware.cors import CORSMiddleware + +from pathlib import Path app = FastAPI() - app.mount("/static", StaticFiles(directory="static"), name="static") +# Für lokales Testen mit separatem Frontend (z.B. file:// oder anderer Port) +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], # in Produktion einschränken! + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +UPLOAD_DIR = Path("uploads") +UPLOAD_DIR.mkdir(exist_ok=True) + + @app.get("/") def read_root(): return {"Hello": "World"} +@app.get("/health") +def health(): + return {"status": "ok"} -@app.get("/items/{item_id}") -def read_item(item_id: int, q: str | None = None): - return {"item_id": item_id, "q": q} +@app.post("/upload") +async def upload_file(file: UploadFile = File(...)): + filename = (file.filename or "").lower() + safe_name = "" + if not (filename.endswith(".step") or filename.endswith(".stp")): + raise HTTPException(status_code=400, detail="Upload a .step or .stp file") + # eindeutiger Dateiname, um Kollisionen zu vermeiden + suffix = Path(file.filename).suffix + safe_name = f"{uuid.uuid4().hex}{suffix}" + target = UPLOAD_DIR / safe_name + + # Datei speichern (streaming) + with target.open("wb") as f: + while chunk := await file.read(1024 * 1024): + f.write(chunk) + + return { + "original_filename": file.filename, + "stored_as": safe_name, + "content_type": file.content_type, + "size_bytes": target.stat().st_size, + } diff --git a/static/upload.html b/static/upload.html index a97cab0..29de416 100644 --- a/static/upload.html +++ b/static/upload.html @@ -22,7 +22,7 @@