加入CND图片保存逻辑
This commit is contained in:
@@ -181,13 +181,13 @@ class MessageStorageDB(BaseDBOperator):
|
|||||||
'messages': messages
|
'messages': messages
|
||||||
}
|
}
|
||||||
|
|
||||||
def update_message_image_path(self, message_id, image_path):
|
def update_message_image_path(self, message_id, image_base64str):
|
||||||
"""
|
"""
|
||||||
更新消息的图片路径
|
更新消息的图片路径
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
message_id: 消息ID
|
message_id: 消息ID
|
||||||
image_path: 图片路径
|
image_base64str: 图片base64内容
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: 更新成功返回True,否则返回False
|
bool: 更新成功返回True,否则返回False
|
||||||
@@ -196,10 +196,10 @@ class MessageStorageDB(BaseDBOperator):
|
|||||||
# 构建SQL语句
|
# 构建SQL语句
|
||||||
sql = """
|
sql = """
|
||||||
UPDATE messages
|
UPDATE messages
|
||||||
SET image_path = %s
|
SET message_thumb = %s
|
||||||
WHERE message_id = %s
|
WHERE message_id = %s
|
||||||
"""
|
"""
|
||||||
params = (image_path, message_id)
|
params = (image_base64str, message_id)
|
||||||
|
|
||||||
# 执行更新操作
|
# 执行更新操作
|
||||||
result = self.execute_update(sql, params)
|
result = self.execute_update(sql, params)
|
||||||
|
|||||||
4
robot.py
4
robot.py
@@ -414,8 +414,8 @@ class Robot(Job):
|
|||||||
try:
|
try:
|
||||||
self.message_storage.archive_message(message)
|
self.message_storage.archive_message(message)
|
||||||
# 单独处理图片消息 后续写定时任务自动完成下载。延时处理。
|
# 单独处理图片消息 后续写定时任务自动完成下载。延时处理。
|
||||||
# if message.msg_type == MessageType.IMAGE: # 图片消息类型
|
if message.msg_type == MessageType.IMAGE: # 图片消息类型
|
||||||
# self.message_storage.process_image(message)
|
self.message_storage.process_image(message)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.LOG.error(f"archive_message error: {e}")
|
self.LOG.error(f"archive_message error: {e}")
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import asyncio
|
||||||
import time
|
import time
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
@@ -112,44 +113,32 @@ class MessageStorage:
|
|||||||
try:
|
try:
|
||||||
# 使用wcf下载图片,确保图片存在
|
# 使用wcf下载图片,确保图片存在
|
||||||
if self.client and msg.msg_id:
|
if self.client and msg.msg_id:
|
||||||
# 创建按群ID或个人wxid分割的目录
|
# 从msg中提取xml内容,获取xml里面的参数
|
||||||
target_dir = os.path.join(self.image_dir, msg.roomid if msg.roomid else msg.sender)
|
xml_content = msg.content.clean_content
|
||||||
# 确保目标目录存在
|
|
||||||
if not os.path.exists(target_dir):
|
root = ET.fromstring(xml_content)
|
||||||
os.makedirs(target_dir, exist_ok=True)
|
img_elem = root.find("img")
|
||||||
# 尝试使用wcf下载图片到分组后的目录
|
if img_elem is not None:
|
||||||
# json = self.client.download_image(msg.appid, msg.content.xml_content, 2)
|
aeskey = img_elem.attrib.get("aeskey", "")
|
||||||
# # {
|
cdnthumburl = img_elem.attrib.get("cdnthumburl", "")
|
||||||
# # "ret": 200,
|
base64_str = asyncio.run(self.client.download_image(aeskey=aeskey, cdnmidimgurl=cdnthumburl))
|
||||||
# # "msg": "操作成功",
|
if base64_str:
|
||||||
# # "data": {
|
self.message_db.update_message_image_path(msg.msg_id, "data:image/png;base64," + base64_str)
|
||||||
# # "fileUrl": "/download/20240720/wx_BTVoJ_o_r6DpxNCNiycFE/0ca5b675-8e2c-4dc1-b288-3c44a40086ec4"
|
return {
|
||||||
# # }
|
'success': True,
|
||||||
# # }
|
'message_id': msg.msg_id,
|
||||||
# # 解析JSON http://192.168.2.240:2532/download/20250428/wx_3BC6eSHGE5xEm_hH3__7c/03ab5c03-5524-4a39-aabe-27ca014a4d1e.png
|
'roomid': msg.roomid,
|
||||||
# if json and json.get('data') and json['data'].get('fileUrl'):
|
'sender': msg.sender,
|
||||||
# file_url = json['data']['fileUrl']
|
'file_path': base64_str
|
||||||
# if file_url:
|
}
|
||||||
# logger.info(f"记录gewe服务端图片路径成功: {msg.msg_id} -> {file_url}")
|
else:
|
||||||
# # 后续如果需要使用,则去服务器端提取图片
|
return {
|
||||||
# # 直接使用下载后的路径更新数据库
|
'success': False,
|
||||||
# self.message_db.update_message_image_path(msg.msg_id, file_url)
|
'message_id': msg.msg_id,
|
||||||
#
|
'roomid': msg.roomid,
|
||||||
# return {
|
'sender': msg.sender,
|
||||||
# 'success': True,
|
'error': "图片下载失败"
|
||||||
# 'message_id': msg.msg_id,
|
}
|
||||||
# 'roomid': msg.roomid,
|
|
||||||
# 'sender': msg.sender,
|
|
||||||
# 'file_path': file_url
|
|
||||||
# }
|
|
||||||
# else:
|
|
||||||
# return {
|
|
||||||
# 'success': False,
|
|
||||||
# 'message_id': msg.msg_id,
|
|
||||||
# 'roomid': msg.roomid,
|
|
||||||
# 'sender': msg.sender,
|
|
||||||
# 'error': "图片下载失败"
|
|
||||||
# }
|
|
||||||
else:
|
else:
|
||||||
return {
|
return {
|
||||||
'success': False,
|
'success': False,
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ class ToolMixin(WechatAPIClientBase):
|
|||||||
raise UserLoggedOut("请先登录")
|
raise UserLoggedOut("请先登录")
|
||||||
|
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
json_param = {"Wxid": self.wxid, "AesKey": aeskey, "Cdnmidimgurl": cdnmidimgurl}
|
json_param = {"Wxid": self.wxid, "FileAesKey": aeskey, "FileNo": cdnmidimgurl}
|
||||||
response = await session.post(f'http://{self.ip}:{self.port}/api/Tools/CdnDownloadImage', json=json_param)
|
response = await session.post(f'http://{self.ip}:{self.port}/api/Tools/CdnDownloadImage', json=json_param)
|
||||||
json_resp = await response.json()
|
json_resp = await response.json()
|
||||||
|
|
||||||
if json_resp.get("Success"):
|
if json_resp.get("Success"):
|
||||||
return json_resp.get("Data")
|
return json_resp.get("Data").get("Image")
|
||||||
else:
|
else:
|
||||||
self.error_handler(json_resp)
|
self.error_handler(json_resp)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user