cloudzy_ai_challenge / cloudzy /utils /file_upload_service.py
matinsn2000's picture
Updated search engine for generating album
8ad42f5
raw
history blame
2.39 kB
import base64
import requests
from pathlib import Path
from typing import Optional
import os
from dotenv import load_dotenv
load_dotenv()
class ImgBBUploader:
"""
Upload an image file to ImgBB and return only the direct public URL.
"""
API_ENDPOINT = "https://api.imgbb.com/1/upload"
def __init__(self, expiration: Optional[int] = None, timeout: int = 30):
api_key = os.getenv("IMAGE_UPLOAD_API_KEY")
if not api_key:
raise ValueError("api_key is required")
self.api_key = api_key
self.expiration = expiration
self.timeout = timeout
def _encode_file_to_base64(self, image_path: Path) -> str:
if not image_path.exists():
raise FileNotFoundError(f"Image not found: {image_path}")
with image_path.open("rb") as f:
data = f.read()
return base64.b64encode(data).decode("ascii")
def upload(self, image_path: str) -> str:
"""
Upload the image and return the direct URL of the uploaded file.
"""
image_path_obj = Path(image_path)
b64_image = self._encode_file_to_base64(image_path_obj)
params = {"key": self.api_key}
if self.expiration is not None:
params["expiration"] = str(self.expiration)
try:
resp = requests.post(
self.API_ENDPOINT,
params=params,
data={"image": b64_image},
timeout=self.timeout,
)
resp.raise_for_status()
data = resp.json()
if data.get("success"):
return data["data"]["url"]
raise RuntimeError(f"Upload failed: {data}")
except requests.RequestException as e:
raise RuntimeError(f"ImgBB upload failed: {e}") from e
if __name__ == "__main__":
uploader = ImgBBUploader(expiration=86400)
result = uploader.upload("/Users/komeilfathi/Documents/hf_deploy_test/cloudzy_ai_challenge/uploads/img_1_20251024_080401_794.jpg")
print(result)
# resp = uploader.upload_file("/Users/komeilfathi/Documents/hf_deploy_test/cloudzy_ai_challenge/uploads/img_1_20251024_080401_794.jpg")
# Example usage:
# uploader = FreeImageHostUploader(api_key="your_api_key_here")
# image_url = uploader.upload_image("path_to_your_image.jpg")
# print(f"Image uploaded successfully: {image_url}")