fix(vision): limite di tipo e dimensione sui tre endpoint di upload
/execute, /preview e /reference-images leggevano l'immagine senza limite di tipo o dimensione, e /reference-images scriveva su disco con estensione .png fissa qualunque fosse il tipo reale. Riusa la convenzione già esistente in files.py (ALLOWED_IMAGE_TYPES, validate_file_size) invece di inventarne una seconda: tipo controllato dall'header prima di leggere, dimensione controllata sul corpo letto, un PDF non è qualcosa che un grafo di visione può misurare. save_reference_image ora scrive con l'estensione del tipo reale dell'upload. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014BBnuACZSCJqXrMYC3LUMU
This commit is contained in:
@@ -195,13 +195,19 @@ async def save_reference_image(
|
||||
station_id: int | None = None,
|
||||
device_code: str | None = None,
|
||||
calibration_snapshot: dict | None = None,
|
||||
extension: str = "png",
|
||||
) -> VisionReferenceImage:
|
||||
"""Keep an image so the graph can be composed and re-tried without a camera."""
|
||||
"""Keep an image so the graph can be composed and re-tried without a camera.
|
||||
|
||||
`extension` must match the upload's real content type (the router derives
|
||||
it from `image.content_type`) - writing a jpeg to disk as `<uuid>.png`
|
||||
would be a lie the filename tells forever.
|
||||
"""
|
||||
# `upload_path` is the resolved Path, `upload_dir` the bare setting: the
|
||||
# rest of the codebase uses the former (see production_export_service).
|
||||
folder = settings.upload_path / "vision" / "reference" / str(task_id)
|
||||
folder.mkdir(parents=True, exist_ok=True)
|
||||
name = f"{uuid4().hex}.png"
|
||||
name = f"{uuid4().hex}.{extension}"
|
||||
(folder / name).write_bytes(image_bytes)
|
||||
|
||||
reference = VisionReferenceImage(
|
||||
|
||||
Reference in New Issue
Block a user