From b98f835ab11aaa4f974dcdf1ae894a466c24e3fe Mon Sep 17 00:00:00 2001 From: wangdongbo <949818794@qq.com> Date: Sun, 8 Feb 2026 14:11:59 +0800 Subject: [PATCH] no message --- utils/send-message-helper.js | 58 ++++++++++++++++++++++++++++++++---- utils/tim-chat.js | 23 +++++++++----- 2 files changed, 68 insertions(+), 13 deletions(-) diff --git a/utils/send-message-helper.js b/utils/send-message-helper.js index 66806cd..0c86122 100644 --- a/utils/send-message-helper.js +++ b/utils/send-message-helper.js @@ -41,13 +41,13 @@ export async function sendTextMessage(content) { /** * 发送图片消息 - * @param {string} imageUrl - 图片URL(字符串) + * @param {string|File} imageSource - 图片URL(字符串)或文件对象 * @param {string} imageName - 图片名称(可选) * @returns {Promise} 发送是否成功 */ -export async function sendImageMessage(imageUrl, imageName = '图片') { - if (!imageUrl) { - toast('图片URL不能为空'); +export async function sendImageMessage(imageSource, imageName = '图片') { + if (!imageSource) { + toast('图片不能为空'); return false; } @@ -57,7 +57,17 @@ export async function sendImageMessage(imageUrl, imageName = '图片') { return false; } - const result = await globalTimChatManager.sendImageMessage(imageUrl); + // 如果是URL字符串,需要先下载转换为文件对象 + let imageFile = imageSource; + if (typeof imageSource === 'string') { + imageFile = await downloadImageAsFile(imageSource, imageName); + if (!imageFile) { + toast('图片下载失败'); + return false; + } + } + + const result = await globalTimChatManager.sendImageMessage(imageFile); if (result?.success) { return true; @@ -72,6 +82,44 @@ export async function sendImageMessage(imageUrl, imageName = '图片') { } } +/** + * 将图片URL下载转换为文件对象(小程序环境) + * @param {string} imageUrl - 图片URL + * @param {string} fileName - 文件名 + * @returns {Promise} 文件对象或null + */ +async function downloadImageAsFile(imageUrl, fileName = '图片') { + return new Promise((resolve) => { + uni.downloadFile({ + url: imageUrl, + success: (res) => { + if (res.statusCode === 200) { + // 返回包含 tempFiles 数组的对象,模拟 uni.chooseMedia 的返回格式 + const fileObj = { + tempFiles: [{ + tempFilePath: res.tempFilePath, + path: res.tempFilePath, + size: 0, + type: 'image' + }], + // 也保留直接的 tempFilePath 以兼容其他代码 + tempFilePath: res.tempFilePath + }; + console.log('图片下载成功,文件对象:', fileObj); + resolve(fileObj); + } else { + console.error('下载图片失败,状态码:', res.statusCode); + resolve(null); + } + }, + fail: (error) => { + console.error('下载图片失败:', error); + resolve(null); + } + }); + }); +} + /** * 发送宣教文章消息 * @param {Object} article - 文章对象 { _id, title, cover, url } diff --git a/utils/tim-chat.js b/utils/tim-chat.js index 81f7c9d..000962b 100644 --- a/utils/tim-chat.js +++ b/utils/tim-chat.js @@ -2189,7 +2189,7 @@ class TimChatManager { async sendImageMessage(imageFile) { if (!this.tim) { this.triggerCallback('onError', 'IM未初始化') - return + return { success: false, error: 'IM未初始化' } } if (!this.conversation) { @@ -2240,20 +2240,27 @@ class TimChatManager { // 触发消息接收回调,让UI立即显示 this.triggerCallback('onMessageReceived', localMessage) - const message = this.tim.createImageMessage({ - to: groupID, - conversationType: TIM.TYPES.CONV_GROUP, - payload: { file: imageFile } - }) - try { + console.log('准备创建图片消息,imageFile:', imageFile) + const message = this.tim.createImageMessage({ + to: groupID, + conversationType: TIM.TYPES.CONV_GROUP, + payload: { file: imageFile } + }) + + console.log('图片消息创建成功:', message) + + if (!message) { + throw new Error('createImageMessage 返回空值') + } + await this.tim.sendMessage(message) localMessage.status = 'success' return { success: true, message: localMessage } } catch (error) { console.error('图片消息发送失败:', error) localMessage.status = 'failed' - return { success: false, error } + return { success: false, error: error.message || error } } } // 发送语音消息