const imageUrl = `${API_BASE_URL}/some/image`
const image = await uni.downloadFile({ url: imageUrl })
uni.share({
provider:'weixin',
type:2,
url: image.tempFilePath
})
// UTS插件代码
import * as wxopensdk from '@tencent/wechat_open_sdk';
let _window: window.Window;
UTSHarmony.onAppAbilityWindowStageCreate((windowStage: window.WindowStage) => {
_window = windowStage.getMainWindowSync()
})
const getImgPath = async (url: string) => {
return new Promise<string>((resolve, reject) => {
uni.downloadFile({
url,
success: (res) => {
resolve(res.tempFilePath);
},
fail: (err) => {
reject(err);
},
});
});
}
export const wxShareImg = async (imageUrl: string) => {
try {
let imageObject = new wxopensdk.WXImageObject
const path = await getImgPath(imageUrl)
imageObject.uri = fileUri.getUriFromPath(path)
console.log('imageObject', path)
let mediaMessage = new wxopensdk.WXMediaMessage()
mediaMessage.mediaObject = imageObject
const req = new wxopensdk.SendMessageToWXReq()
req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
req.message = mediaMessage
try {
await WXApi.sendReq(_window.getUIContext().getHostContext() as common.UIAbilityContext, req)
} catch (error) {
return false;
}
return true;
} catch (error) {
return false;
}
}
1 个回复
Ask小助手 - Ask社区AI助手
好的,我们来评审一下这个 bug 反馈。
首先,从 DCloud 官方人员的视角来看,这是一个质量非常高的反馈。反馈者对问题的定位精准,对比了不同平台和不同实现方式的表现,并提供了可直接运行的代码示例,这极大地帮助我们分析问题。
下面是对反馈内容的详细分析:
1. 反馈内容完整性评审
BUG 标题:
【报Bug】uni.share微信分享无后缀名的本地图片会出现错误标题非常清晰,直接点明了核心问题:
uni.share+微信分享+无后缀名本地图片+错误。这让我们一眼就能抓住重点。BUG 描述:描述详细、逻辑清晰。反馈者不仅说明了现象,还通过自己的对比测试(通过 uts 插件直接调用 SDK 分享无此问题),将问题根源精确地定位到了 uni-app 框架层面,而非微信 SDK 本身。这为我们节省了大量排查时间。
代码示例:提供的两段代码都非常完整。
uni.share的代码示例可以直接运行,逻辑自洽。uts插件代码也完整展示了如何通过原生 SDK 实现分享,作为对比依据非常有说服力。复现步骤:描述清晰明确,结合代码示例,只需要替换一个真实的网络图片接口即可复现,可操作性很强。
预期结果:合理。开发者期望通过
uni.downloadFile下载的图片(无论是否有后缀名)都能正常分享,这符合直觉和一般开发逻辑。实际结果:描述准确。指出了问题出现的特定条件(无后缀名)和平台差异(iOS 存在相似情况,Android 正常),这种细致的对比非常有价值。
分类信息:非常完整。包含了开发环境、HBuilderX 版本、操作系统版本、Vue 版本、设备型号等所有关键信息。这使得我们可以快速在相应环境下复现问题。
结论:这是一个近乎完美的 bug 反馈,内容完整、逻辑清晰、有对比分析,无需补充任何信息即可进入分析和处理流程。
2. Bug 是否成立及分析
Bug 成立。反馈者的问题分析非常到位,这个问题确实出在 uni-app 框架在鸿蒙平台(以及 iOS 平台)处理分享图片时的内部逻辑上。
知识库依据与分析:
uri参数被忽略。这说明鸿蒙平台微信分享的实现有其特殊性,内部可能没有直接使用文件路径,而是需要获取图片的二进制数据或类型信息。DCloud_UNI_LXH曾指出一个类似问题:“微信分享时,之前处理图片时有问题,会导致分享失败”,并提供了一个修复用的har包。uni.share接收到一个没有后缀名的本地图片路径(如/data/storage/.../somefile)时,在鸿蒙和 iOS 上的内部处理逻辑无法正确识别该文件是一个有效的 jpeg/png 图片,因此将其视为无效文件,导致分享失败。而通过 uts 插件直接调用微信 SDK,开发者可以手动设置imageObject.uri,绕过了框架的自动识别过程,所以能成功。3. 是否为基本概念问题及解决方案
这不是一个基本概念问题,而是框架在特定平台上的一个实现缺陷。
替代方案:
在你提到的知识库中,
DCloud_UNI_LXH提供了一个修复此问题的har包。这很可能是解决此问题的官方补丁。推荐方案:根据知识库中的指引,下载这个
har包:https://web-ext-storage.dcloud.net.cn/temp/uni_modules__uni_share_weixin.har,并将其放到你的工程项目项目根目录/harmony-configs/libs目录下,然后重新编译运行,看问题是否解决。这个补丁正是用于修复图片处理相关的分享失败问题。备选方案:如果因某些原因无法使用上述
har包,你可以继续使用你之前那种通过 uts 插件直接调用微信 SDK 的方式,这已经被你自己验证过是可行的。总结来说,感谢你提供如此详细和高质量的反馈,这个 Bug 我们已经定位,并且很可能已经有了修复补丁,请按上述方案尝试解决。
要回复问题请先登录或注册
公告
更多>相关问题