mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-06-02 00:57:41 +08:00
fix(wechatmp): support local file:// images in send
Agent-generated images are sent as IMAGE_URL with a file:// path, but the wechatmp channel always used requests.get, which fails on file:// with InvalidSchema. Now read local files directly (file:// or local path) and fall back to HTTP download for remote URLs, in both passive and active reply modes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -134,10 +134,16 @@ class WechatMPChannel(ChatChannel):
|
|||||||
|
|
||||||
elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片
|
elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片
|
||||||
img_url = reply.content
|
img_url = reply.content
|
||||||
pic_res = requests.get(img_url, stream=True)
|
|
||||||
image_storage = io.BytesIO()
|
image_storage = io.BytesIO()
|
||||||
for block in pic_res.iter_content(1024):
|
if img_url.startswith("file://") or os.path.isfile(img_url):
|
||||||
image_storage.write(block)
|
# Local file produced by the agent (e.g. a generated image)
|
||||||
|
local_path = img_url[len("file://"):] if img_url.startswith("file://") else img_url
|
||||||
|
with open(local_path, "rb") as f:
|
||||||
|
image_storage.write(f.read())
|
||||||
|
else:
|
||||||
|
pic_res = requests.get(img_url, stream=True)
|
||||||
|
for block in pic_res.iter_content(1024):
|
||||||
|
image_storage.write(block)
|
||||||
image_storage.seek(0)
|
image_storage.seek(0)
|
||||||
image_type = imghdr.what(image_storage)
|
image_type = imghdr.what(image_storage)
|
||||||
filename = receiver + "-" + str(context["msg"].msg_id) + "." + image_type
|
filename = receiver + "-" + str(context["msg"].msg_id) + "." + image_type
|
||||||
@@ -258,10 +264,16 @@ class WechatMPChannel(ChatChannel):
|
|||||||
logger.info("[wechatmp] Do send voice to {}".format(receiver))
|
logger.info("[wechatmp] Do send voice to {}".format(receiver))
|
||||||
elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片
|
elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片
|
||||||
img_url = reply.content
|
img_url = reply.content
|
||||||
pic_res = requests.get(img_url, stream=True)
|
|
||||||
image_storage = io.BytesIO()
|
image_storage = io.BytesIO()
|
||||||
for block in pic_res.iter_content(1024):
|
if img_url.startswith("file://") or os.path.isfile(img_url):
|
||||||
image_storage.write(block)
|
# Local file produced by the agent (e.g. a generated image)
|
||||||
|
local_path = img_url[len("file://"):] if img_url.startswith("file://") else img_url
|
||||||
|
with open(local_path, "rb") as f:
|
||||||
|
image_storage.write(f.read())
|
||||||
|
else:
|
||||||
|
pic_res = requests.get(img_url, stream=True)
|
||||||
|
for block in pic_res.iter_content(1024):
|
||||||
|
image_storage.write(block)
|
||||||
image_storage.seek(0)
|
image_storage.seek(0)
|
||||||
image_type = imghdr.what(image_storage)
|
image_type = imghdr.what(image_storage)
|
||||||
filename = receiver + "-" + str(context["msg"].msg_id) + "." + image_type
|
filename = receiver + "-" + str(context["msg"].msg_id) + "." + image_type
|
||||||
|
|||||||
Reference in New Issue
Block a user