需求
微信小程序,有一个文件是协议的文件(如果用记事本打开将会是一堆乱码),要分享给好友。
微信官方文档
思路
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,其他就不行了。