Spaces:
Running
Running
| import aiohttp | |
| import uuid | |
| import logging | |
| from urllib.parse import urlparse | |
| from app.core.firebase_config import firebase_bucket | |
| import io | |
| async def download_file(url: str) -> str: | |
| parsed_url = urlparse(url) | |
| file_extension = parsed_url.path.split('.')[-1] | |
| if not file_extension: | |
| file_extension = 'tmp' | |
| filename = f"{uuid.uuid4()}.{file_extension}" | |
| try: | |
| async with aiohttp.ClientSession() as session: | |
| async with session.get(url) as response: | |
| if response.status != 200: | |
| raise Exception(f"Failed to download file: HTTP {response.status}") | |
| content = await response.read() | |
| blob = firebase_bucket.blob(filename) | |
| blob.upload_from_string(content, content_type=response.headers.get('content-type')) | |
| logging.info(f"File downloaded and saved to Firebase: {filename}") | |
| return filename | |
| except Exception as e: | |
| logging.error(f"Error downloading file: {str(e)}") | |
| raise | |
| async def remove_temp_file(filename: str): | |
| try: | |
| blob = firebase_bucket.blob(filename) | |
| blob.delete() | |
| logging.info(f"Temporary file deleted from Firebase: {filename}") | |
| except Exception as e: | |
| logging.error(f"Error deleting temporary file from Firebase: {str(e)}") | |
| def get_file_content(filename: str) -> bytes: | |
| try: | |
| blob = firebase_bucket.blob(filename) | |
| return blob.download_as_bytes() | |
| except Exception as e: | |
| logging.error(f"Error getting file content from Firebase: {str(e)}") | |
| raise | |
| def get_file_stream(filename: str) -> io.BytesIO: | |
| try: | |
| content = get_file_content(filename) | |
| return io.BytesIO(content) | |
| except Exception as e: | |
| logging.error(f"Error getting file stream from Firebase: {str(e)}") | |
| raise | |
| async def upload_file_to_firebase(file_content: bytes, filename: str) -> str: | |
| try: | |
| blob = firebase_bucket.blob(filename) | |
| blob.upload_from_string(file_content, content_type='application/octet-stream') | |
| logging.info(f"File uploaded to Firebase: {filename}") | |
| return filename | |
| except Exception as e: | |
| logging.error(f"Error uploading file to Firebase: {str(e)}") | |
| raise |