From 7146f6510a7f84e8f1dfd6b50723818f72e432c1 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 4 Sep 2025 17:35:08 +0800 Subject: [PATCH 1/9] bugfix --- ahserver/filestorage.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index 966859a..032df6d 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -105,8 +105,9 @@ class FileStorage: str(v % paths[0]), str(v % paths[1]), str(v % paths[2]), - str(v % paths[3]), - name)) + str(v % paths[3])) + _mkdir(path) + path = os.path.join(path, name) return path def remove(self, path): From d7a51463fed2a55a3e50e951866ff9c3dd8830ff Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 4 Sep 2025 17:50:43 +0800 Subject: [PATCH 2/9] bugfix --- ahserver/filestorage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index 032df6d..88101bd 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -101,7 +101,7 @@ class FileStorage: root = self.root if userid: root += f'/{userid}' - path = os.path.abspath(os.path.join(root, + path = os.path.join(root, str(v % paths[0]), str(v % paths[1]), str(v % paths[2]), From acc2474479d643b69d255f439ccfe6ac36de01ac Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 12 Sep 2025 12:06:15 +0800 Subject: [PATCH 3/9] bugfix --- ahserver/xtermProcessor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ahserver/xtermProcessor.py b/ahserver/xtermProcessor.py index 5a17546..7861aa1 100644 --- a/ahserver/xtermProcessor.py +++ b/ahserver/xtermProcessor.py @@ -25,6 +25,10 @@ class XtermProcessor(PythonScriptProcessor): async for msg in ws: if msg.type == aiohttp.WSMsgType.TEXT: data = DictObject(**json.loads(msg.data)) + if data.type == 'close': + debug(f'accept client close request, close the ws') + self.running = False + return if data.type == 'input': self.p_obj.stdin.write(data.data) elif data.type == 'heartbeat': From 3548f8303e86b5811189187dfd70670bc320fde4 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Sep 2025 20:33:12 +0800 Subject: [PATCH 4/9] bugfi --- ahserver/filestorage.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index 88101bd..fee7b54 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -119,6 +119,28 @@ class FileStorage: except Exception as e: exception(f'{path=}, {p=} remove error') + async def streaming_read(request, webpath, buf_size=8096): + fp = self.realPath(webpath) + stats = os.stat(fp) + startpos = 0 + endpos = stats.st_size + range = request.headers.get('Range') + if range: + s,e = range.split('-') + if s: + startpos = int(s) + if e: + endpos = int(e) + debug(f'filesize={stats.st_size}, {startpos=}, {endpos=}') + async with aiofiles.open(fp, 'rb') as f: + if startpos > 0: + await f.seek(startpos) + pos = startpos + while pos < endpos: + b = f.read(buf_size) + yield b + pos += len(b) + async def save(self,name,read_data, userid=None): p = self._name2path(name, userid=userid) fpath = p[len(self.root):] From 5c3e2c638288d1d4e4293dea9a6963893fc7ffc9 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Sep 2025 20:44:24 +0800 Subject: [PATCH 5/9] bugfix --- ahserver/filestorage.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index fee7b54..f7bd2ff 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -125,7 +125,10 @@ class FileStorage: startpos = 0 endpos = stats.st_size range = request.headers.get('Range') + bytes=0- + if range: + range = range.split('=')[-1] s,e = range.split('-') if s: startpos = int(s) From b9955ce2a8e20472ba0389d484f9e289fc384634 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Sep 2025 20:45:49 +0800 Subject: [PATCH 6/9] bugfix --- ahserver/filestorage.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index f7bd2ff..f17f6c0 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -125,8 +125,6 @@ class FileStorage: startpos = 0 endpos = stats.st_size range = request.headers.get('Range') - bytes=0- - if range: range = range.split('=')[-1] s,e = range.split('-') From e4f5ae99bfa6d057e35243b2c3ee13d97c6095f7 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Sep 2025 20:55:18 +0800 Subject: [PATCH 7/9] bugfi --- ahserver/globalEnv.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ahserver/globalEnv.py b/ahserver/globalEnv.py index e2954e0..9970261 100644 --- a/ahserver/globalEnv.py +++ b/ahserver/globalEnv.py @@ -313,6 +313,7 @@ def initEnv(): g.partial = partial g.StreamHttpClient = StreamHttpClient g.server_error = server_error + g.FileStorage = FileStorage def set_builtins(): all_builtins = [ i for i in dir(builtins) if not i.startswith('_')] From fdb90612e72ad674ec731859cd94f0091c1d5793 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Sep 2025 20:58:34 +0800 Subject: [PATCH 8/9] bugfi --- ahserver/filestorage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index f17f6c0..58c33b1 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -119,7 +119,7 @@ class FileStorage: except Exception as e: exception(f'{path=}, {p=} remove error') - async def streaming_read(request, webpath, buf_size=8096): + async def streaming_read(self, request, webpath, buf_size=8096): fp = self.realPath(webpath) stats = os.stat(fp) startpos = 0 From 7b6e8dc67225850ec5e58f4ec72272d88b879e7d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Sep 2025 21:01:57 +0800 Subject: [PATCH 9/9] bugfi --- ahserver/filestorage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahserver/filestorage.py b/ahserver/filestorage.py index 58c33b1..cc20731 100644 --- a/ahserver/filestorage.py +++ b/ahserver/filestorage.py @@ -138,7 +138,7 @@ class FileStorage: await f.seek(startpos) pos = startpos while pos < endpos: - b = f.read(buf_size) + b = await f.read(buf_size) yield b pos += len(b)