【uni-app】微信小程序分享自定义文件给好友

这里写自定义目录标题

需求

微信小程序,有一个文件是协议的文件(如果用记事本打开将会是一堆乱码),要分享给好友。

微信官方文档

wx.getFileSystemManager文档

思路

1、使用wx.getFileSystemManager.writeFileSync创建一个新的文件;
2、使用wx.getFileSystemManager.saveFile将一个文件并保存在临时文件内存中(这需要获取微信小程序文件权限);
3、调用wx.shareFileMessage方法进行分享这个 临时文件

代码实现

1、下载文件到临时内存

/**
 * 下载文件
 */
downloadFlie(measureUid) {
	const that = this;
	// 二进制字符串
	let recordArrayBuffer = uni.getStorageSync(measureUid);
	console.log("获取文件信息", recordArrayBuffer);
	const fileExtension = '.record';
	
	// 使用文件系统管理器将二进制数据写入文件
	const fs = wx.getFileSystemManager();
	const filePath = `${wx.env.USER_DATA_PATH}/temp${fileExtension}`;

	try {
		fs.writeFileSync(filePath, recordArrayBuffer, 'hex')
		console.log('文件已创建:', filePath);

		// 保存文件到临时目录,并获取临时文件路径
		fs.saveFile({
			tempFilePath: filePath,
			success: function(res) {
				that.tempFilePath = res.savedFilePath;
				console.log('临时文件路径:', res.savedFilePath);
				// 本来应该在这里调用分享的操作,可是微信不给在回调函数里面调用shareFileMessage方法
			},
			fail: function(err) {
				console.error('保存文件到临时目录失败:', err);
			}
		});
	} catch (err) {
		console.error('写入文件出错:', err);
	}
},

2、分享给好友

/**
 * 将下载好的record文件 分享给好友
 */
shareFile() {
	// 自定义文件名
	let fileName = 123.record;
	wx.shareFileMessage({
		filePath: this.tempFilePath,
		fileName: fileName,
		success() {
			console.log('转发文档成功')
		},
		fail: console.error,
	})
},

注意

调用wx.shareFileMessage一定要按钮的@click显示调用,不能在回调函数里面调用,长按也是属于回调。否则会出现以下错误
在这里插入图片描述
意思是说分享只能由用户自己手动点击触发,不可以通过回调触发。不过我看见网上有人在request回调中也可以正常调用wx.shareFileMessage,其他就不行了。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值