CostalSegment / uploader /do_spaces.py
AveMujica's picture
Update uploader/do_spaces.py (#2)
0b7ba62 verified
raw
history blame contribute delete
1.94 kB
import os
import boto3
from botocore.client import Config
import uuid
from PIL import Image
import io
def upload_mask(image, prefix="mask"):
"""
Upload the segmentation mask image to DigitalOcean Spaces
Args:
image: PIL Image object
prefix: filename prefix
Returns:
URL of the uploaded file
"""
try:
# Get credentials from environment variables
do_key = os.environ.get('DO_SPACES_KEY')
do_secret = os.environ.get('DO_SPACES_SECRET')
do_region = os.environ.get('DO_SPACES_REGION')
do_bucket = os.environ.get('DO_SPACES_BUCKET')
# Validate that credentials exist
if not all([do_key, do_secret, do_region, do_bucket]):
raise ValueError("Missing DigitalOcean Spaces credentials")
# Create S3 client
session = boto3.session.Session()
client = session.client('s3',
region_name=do_region,
endpoint_url=f'https://{do_region}.digitaloceanspaces.com',
aws_access_key_id=do_key,
aws_secret_access_key=do_secret)
# Generate a unique filename
filename = f"{prefix}_{uuid.uuid4().hex}.png"
# Convert the image to a byte stream
img_byte_arr = io.BytesIO()
image.save(img_byte_arr, format='PNG')
img_byte_arr.seek(0)
# Upload to Spaces
client.upload_fileobj(
img_byte_arr,
do_bucket,
filename,
ExtraArgs={'ACL': 'public-read', 'ContentType': 'image/png'}
)
# Return the public URL
url = f'https://{do_bucket}.{do_region}.digitaloceanspaces.com/{filename}'
return url
except Exception as e:
print(f"Upload failed: {str(e)}")
return f"Upload error: {str(e)}"