33 lines
1 KiB
Python
33 lines
1 KiB
Python
from urllib.parse import urljoin
|
|
|
|
from fastapi import UploadFile, HTTPException
|
|
from httpx import AsyncClient, Response
|
|
|
|
from app.config import settings
|
|
|
|
|
|
class ImageService:
|
|
@staticmethod
|
|
async def upload_file(file: UploadFile, remote_server_url: str) -> Response:
|
|
try:
|
|
file_content = await file.read()
|
|
async with AsyncClient() as ac:
|
|
response = await ac.post(
|
|
remote_server_url,
|
|
files={"file": file_content},
|
|
timeout=20,
|
|
)
|
|
if response.status_code != 200:
|
|
raise HTTPException(status_code=response.status_code, detail=response.json()["detail"])
|
|
return response
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@classmethod
|
|
async def upload_file_returning_str(cls, file: UploadFile, sub_str: str) -> str:
|
|
remote_server_url = urljoin(settings.IMAGE_UPLOAD_SERVER, sub_str)
|
|
response = await cls.upload_file(file, remote_server_url)
|
|
image_url = response.json()["image_url"]
|
|
image_url = urljoin(settings.IMAGE_UPLOAD_SERVER, image_url)
|
|
return image_url
|
|
|