From c86602ebafbf12f62ce38e03cbbe52ed9b92512a Mon Sep 17 00:00:00 2001 From: Ethan Date: Mon, 24 Feb 2025 20:17:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E4=B8=AD=E5=9B=BE=E7=89=87=E8=8E=B7=E5=8F=96=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=EF=BC=8C=E8=BE=83=E4=B9=8B=E5=89=8D=E7=9A=84=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=9B=BE=E7=89=87=E4=BB=85=E6=8F=90=E4=BE=9B=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E7=9A=84=E6=83=85=E5=86=B5=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E5=96=84=E4=B8=BA=E8=8E=B7=E5=8F=96=E5=BE=AE=E4=BF=A1=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E4=B8=AD=E5=AE=9E=E9=99=85=E5=9B=BE=E7=89=87=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=EF=BC=8C=E6=96=B9=E4=BE=BF=E5=90=8E=E7=BB=AD=20ocr=20?= =?UTF-8?q?=E6=88=96=E8=80=85=20llm=20vision=20=E8=AF=86=E5=88=AB=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E5=9B=BE=E7=89=87=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/platform/sources/gewechat.py | 4 +++- pkg/utils/image.py | 25 +++++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/platform/sources/gewechat.py b/pkg/platform/sources/gewechat.py index ea8592ee..da5548cd 100644 --- a/pkg/platform/sources/gewechat.py +++ b/pkg/platform/sources/gewechat.py @@ -87,7 +87,9 @@ class GewechatMessageConverter(adapter.MessageConverter): base64_str, image_format = await image.get_gewechat_image_base64( gewechat_url=self.config["gewechat_url"], app_id=self.config["app_id"], - xml_content=image_xml + xml_content=image_xml, + token=self.config["token"], + image_type=2 ) return platform_message.MessageChain([ diff --git a/pkg/utils/image.py b/pkg/utils/image.py index 712d55d7..ff266446 100644 --- a/pkg/utils/image.py +++ b/pkg/utils/image.py @@ -9,14 +9,20 @@ import PIL.Image import httpx -async def get_gewechat_image_base64(gewechat_url: str, app_id: str, xml_content: str, image_type: int = 2) -> \ -typing.Tuple[str, str]: +async def get_gewechat_image_base64( + gewechat_url: str, + app_id: str, + xml_content: str, + token: str, + image_type: int = 2 +) -> typing.Tuple[str, str]: """从gewechat服务器获取图片并转换为base64格式 Args: gewechat_url (str): gewechat服务器地址 app_id (str): gewechat应用ID xml_content (str): 图片的XML内容 + token (str): Gewechat API Token image_type (int, optional): 图片类型. Defaults to 2. 1: 高清图片 2: 常规图片 @@ -24,16 +30,19 @@ typing.Tuple[str, str]: Returns: typing.Tuple[str, str]: (base64编码, 图片格式) - - Raises: - Exception: 当图片下载或处理失败时抛出异常 """ + headers = { + 'X-GEWE-TOKEN': token, + 'Content-Type': 'application/json' + } + async with aiohttp.ClientSession() as session: # 获取图片下载链接 async with session.post( f"{gewechat_url}/v2/api/message/downloadImage", + headers=headers, json={ - "app_id": app_id, + "appId": app_id, "type": image_type, "xml": xml_content } @@ -48,13 +57,13 @@ typing.Tuple[str, str]: image_url = f"{gewechat_url}{resp_data['data']['fileUrl']}" # 下载图片内容 - async with session.get(image_url) as img_response: + async with session.get(image_url, headers=headers) as img_response: if img_response.status != 200: raise Exception(f"下载gewechat图片失败: {await img_response.text()}") # 获取图片格式 content_type = img_response.headers.get('Content-Type', '') - image_format = content_type.split('/')[-1] # 例如 'image/jpeg' -> 'jpeg' + image_format = content_type.split('/')[-1] # 读取图片数据并转换为base64 image_data = await img_response.read()