uni-app 鸿蒙 app分享图片到微信,大小超过 80kb 就提示参数非法,无法分享

uni-app 鸿蒙 app分享图片到微信,大小超过 80kb 就提示参数非法,无法分享

如题,我用canvas画布生成的海报图片分享到微信,大小超过 80kb 就无法分享。 查询微信官方 sdk 是说 100kb,实际测试 80kb 就无法分享了。 微信分享 sdk说是用 url 的方式就不会限制,本地文件路径不算 url 吗? 请问大家是如何解决的?

代码如下:

this.$refs.painter.canvasToTempFilePathSync({   
    fileType: "jpg",  
    quality: 1,  
    success: (res) => {    
        uni.share({  
            provider: "weixin",  
            scene: "WXSceneSession",  
            type: 2,  
            imageUrl: res.tempFilePath,  
            success: function(res) {  
                console.log("success:" + JSON.stringify(res));  
            },  
            fail: function(err) {  
                console.log("fail:" + JSON.stringify(err));  
            }  
        });  
    }  
});

更多关于uni-app 鸿蒙 app分享图片到微信,大小超过 80kb 就提示参数非法,无法分享的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

更新:解压压缩包得到 har 后缀文件,放入到 harmony-configs/libs 文件夹下。然后选择重启并清空缓存再测试。
如果仍有问题,请私信我跟进。

感谢反馈问题,已确认 bug,稍后提供解决方案
你目前传递的图片具体是多大,目前图片会优先转成 base64,这个过程会让图片变大,80k 图片转成 base64 刚好超过 100k,达到限制你可临时使用较小的图片,bug 修复中。

更多关于uni-app 鸿蒙 app分享图片到微信,大小超过 80kb 就提示参数非法,无法分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


非常感谢及时跟进!?

回复 啊鸭鸭: 试一下我给的包,看看是否解决了问题

回复 啊鸭鸭: 你的可以了吗?

回复 银狼: 还没解决,已经反馈给工作人员了,在等处理

回复 啊鸭鸭: 嗯嗯,我也没解决

回复 啊鸭鸭: har 包已更新,我测试大图片小图片不同格式都是正常的了

回复 DCloud_UNI_OttoJi: 非常感谢,已经正常分享了!点赞

这个问题是由于微信分享对本地临时文件路径的限制导致的。当图片超过80KB时,微信SDK会拒绝分享本地路径的图片。

解决方案是将图片上传到服务器获取网络URL后再分享:

  1. 使用uni.uploadFile将图片上传到服务器
this.$refs.painter.canvasToTempFilePathSync({
    fileType: "jpg",
    quality: 0.8, // 适当降低质量
    success: (res) => {
        uni.uploadFile({
            url: '你的服务器地址',
            filePath: res.tempFilePath,
            name: 'file',
            success: (uploadRes) => {
                const imageUrl = JSON.parse(uploadRes.data).url; // 获取服务器返回的URL
                uni.share({
                    provider: "weixin",
                    scene: "WXSceneSession",
                    type: 2,
                    imageUrl: imageUrl,
                    success: function(res) {
                        console.log("success:" + JSON.stringify(res));
                    }
                });
            }
        });
    }
});
  1. 如果不想搭建服务器,可以使用uniCloud的云存储:
// 需要先开通uniCloud
const result = await uniCloud.uploadFile({
    filePath: res.tempFilePath,
    cloudPath: 'poster.jpg'
});
const imageUrl = result.fileID;
回到顶部