from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import FileResponse, JSONResponse from datetime import datetime, timedelta import shutil import os app = FastAPI() # Carpeta para almacenar las imágenes UPLOAD_FOLDER = "uploaded_images" os.makedirs(UPLOAD_FOLDER, exist_ok=True) # Diccionario para almacenar las horas de carga de las imágenes image_upload_times = {} @app.get("/uploaded_images/{image_name}") async def get_image(image_name: str): """ Devuelve la imagen solicitada desde el directorio de imágenes subidas. Si ha pasado más de 1 hora desde su carga, la imagen será eliminada. """ image_path = os.path.join(UPLOAD_FOLDER, image_name) if not os.path.exists(image_path): raise HTTPException(status_code=404, detail="Imagen no encontrada") # Verificar si ha pasado 1 hora desde la carga if image_name in image_upload_times: upload_time = image_upload_times[image_name] if datetime.now() - upload_time > timedelta(hours=1): # Eliminar la imagen después de 1 hora os.remove(image_path) del image_upload_times[image_name] raise HTTPException(status_code=404, detail="Imagen eliminada después de 1 hora") return FileResponse(image_path) @app.post("/upload/") async def upload_image(file: UploadFile = File(...)): """ Sube una imagen y devuelve una URL pública accesible desde Hugging Face. Registra el tiempo de carga y elimina la imagen después de 1 hora. """ file_path = os.path.join(UPLOAD_FOLDER, file.filename) with open(file_path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) # Registrar la hora de carga image_upload_times[file.filename] = datetime.now() space_name = "img" base_url = f"https://jairodanielmt-{space_name}.hf.space" image_url = f"{base_url}/uploaded_images/{file.filename}" return JSONResponse(content={"url": image_url})