from fastapi import UploadFile, HTTPException import boto3 from botocore.exceptions import NoCredentialsError from config.settings import settings s3_client = boto3.client( 's3', aws_access_key_id=settings.aws_access_key_id, aws_secret_access_key=settings.aws_secret_access_key ) class UploadService: @staticmethod async def upload_file(file: UploadFile): try: s3_client.upload_fileobj(file.file, settings.aws_bucket_name, file.filename) file_url = f"https://{settings.aws_bucket_name}.s3.amazonaws.com/{file.filename}" return {"file_url": file_url} except NoCredentialsError: raise HTTPException(status_code=500, detail="AWS credentials not available") except Exception as e: raise HTTPException(status_code=500, detail=f"Could not upload file: {str(e)}")