diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index 2ab7dd0..cbe29cd 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -8,7 +8,7 @@ import aiofiles import json import time import base64 - +from urllib.parse import quote from appPublic.worker import get_event_loop from appPublic.folderUtils import _mkdir from appPublic.base64_to_file import base64_to_file, getFilenameFromBase64 @@ -212,6 +212,10 @@ async def downloadfile2url(request, url, headers=None, params=None, data={}, met url = env.entire_url('/idfile?path=') + env.quote(webpath) return url +def get_baseurl(): + baseurl = os.environ.get('BASEURL') + return baseurl + async def base642file(b64str): filename = getFilenameFromBase64(b64str) if ',' in b64str: @@ -223,4 +227,24 @@ async def base642file(b64str): await f.write(binary_data) return fpath +async def b64media2url(request, mediafile): + # env = request._run_ns + # entire_url = env.entire_url + if mediafile.startswith('http://') or mediafile.startswith('https://'): + return mediafile + webpath = mediafile + if mediafile.startswith('data:'): + fpath = await base642file(mediafile) + webpath = FileStorage().webpath(fpath) + elif len(mediafile) > 8000: + e = Exception(f'mediafile is not a media file') + exception(f'{e}') + return '' + if request: + url = entire_url('/idfile?path=') + quote(webpath) + return url + baseurl = get_baseurl() + if baseurl: + return f'{baseurl}/idfile?path={quote(mediafile)}' + return f'/idfile?path={quote(mediafile)}' diff --git a/ahserver/globalEnv.py b/ahserver/globalEnv.py index b327c1e..1aadb7a 100644 --- a/ahserver/globalEnv.py +++ b/ahserver/globalEnv.py @@ -37,6 +37,7 @@ import datetime from openpyxl import Workbook from tempfile import mktemp +from base64_to_file import hex2base64 from appPublic.jsonConfig import getConfig from appPublic.dictObject import DictObject from appPublic.Singleton import GlobalEnv @@ -77,7 +78,7 @@ from .error import ( from .filetest import current_fileno from .filedownload import path_download, file_download, file_response -from .filestorage import FileStorage, downloadfile2url +from .filestorage import FileStorage, downloadfile2url, get_baseurl, b64media2url from .serverenv import ServerEnv def server_error(errcode): @@ -105,10 +106,6 @@ def basic_auth_headers(user, passwd): "Authorization":ba.encode() } -def get_baseurl(): - baseurl = os.environ.get('BASEURL') - return baseurl - async def stream_response(request, async_data_generator, content_type='text/html'): res = StreamResponse() if content_type: @@ -335,6 +332,8 @@ def initEnv(): g.return_error = return_error g.openai_401 = openai_401 g.get_baseurl = get_baseurl + g.hex2base64 = hex2base64 + g.b64media2url = b64media2url g.openai_403 = openai_403 g.openai_400 = openai_400 g.openai_429 = openai_429