uniapp微信小程序,不下载文件借助小程序直接分享文件

思路:

借助的分享小程序的api,在分享小程序时,把分享的文件名称和url一并分享出去,在打开小程序时进行检查,如果判断出来有这两个数据,则进行文件下载打开操作。

实操:

1.说明一下我的data(){return{}}中的数据:

data:[
    {
	    "name": "doc测试",
	    "url": "https://gitee.com/xiangshang1/test/raw/master/test/%E6%B5%8B%E8%AF%95.doc",
	    "time": "2024-04-26",
    }
],
sharedItem: {
	"name": "产品名称"
},

sharedItem是在分享时存数据的,默认值为产品名称,这样可以在使用右上角分享是正常分享出去

2.methods中的方法:

        //分享小程序保存数据
		setSharedItem(item) {
			this.sharedItem = item; // 将点击的 item 存储到 sharedItem 中
		},
		//打开
		download(url, name) {
			//中文转义
			function encodeChinese(url) {
				let encodedUrl = '';
				for (let i = 0; i < url.length; i++) {
					let char = url.charAt(i);
					// 判断是否为中文字符
					if (/[\u4E00-\u9FA5]/.test(char)) {
						// 如果是中文字符,则进行编码
						encodedUrl += encodeURIComponent(char);
					} else {
						// 如果不是中文字符,则保持原样
						encodedUrl += char;
					}
				}
				return encodedUrl;
			}
			let encodedUrl = encodeChinese(url);
			console.log("转义后的url",encodedUrl);
			let downurl = encodedUrl;
			console.log("转义前的url",url);
			// let downurl = url;
			const hasExtension = name.includes('.');
			const fileExtension = hasExtension ? '' : url.split('.').pop();
			// const fileExtension = url.split('.').pop();
			// console.log("下载链接b", downurl, "名称:", name, "后缀", fileExtension);
			uni.downloadFile({
				url: downurl,
				filePath: uni.env.USER_DATA_PATH + "/" + name + (hasExtension ? '' : ("." + fileExtension)),
				// filePath: uni.env.USER_DATA_PATH + "/" + name + "." + fileExtension,
				success: function (res) {
					console.log("下载成功");
					var filePath = res.filePath || res.tempFilePath;
					//打开函数支持格式:doc,docx,xls,xlsx,ppt,pptx,pdf。
					uni.openDocument({
						filePath: filePath,
						showMenu: true,
						success: function (res) {
							console.log('打开文档成功');
						}, fail: function (error) {
							console.log(filePath, "我打开失败了");
							console.error('打开文档失败', error);
						}
					});
				}, fail: function (error) {
					console.log(url, "我下载失败了");
					console.error('下载文件失败', error);
				}
			});
		},

分别是分享时存储数据,下载打开文档,使用的代码。转义是因为,有些时候带中文的url下载失败,莫名其妙的,就加了个转义

3.在metods级,写onShareAppMessage,onShareAppMessage是官方提供的方法:

onShareAppMessage(res) {
		if (res.from === 'button') {// 来自页面内分享按钮
			console.log("分享的数据", this.sharedItem);
		}
		setTimeout(() => {
			this.sharedItem = { "name": "产品名称" };
			console.log("已初始化sharedItem");
		}, 3000); // 延迟执行
		return {
			title: this.sharedItem.name,
			path: '/pages/index/index?' + "url=" + this.sharedItem.url + "&name=" + this.sharedItem.name
		}
	},

使用setTimeout是为了让sharedItem在分享后重新初始化为产品名称,return会将url和name一并加在页面后面传递出去

4.在onLoad中的代码:

onLoad(e) {
		//显示分享按钮
		uni.showShareMenu({
			withShareTicket: true,
			menus: ['shareAppMessage', 'shareTimeline']
		})
		if (Object.keys(e).length > 1 && e.url != "undefined") {
			console.log("加载时检测到了数据", e)
			this.download(e.url, e.name)
		} else {
			console.log("加载时没有检测到数据");
		}
	},

uni.showShareMenu会在右上角的菜单中显示分享功能,下面的if判断会在数据长度大于一且url不为空时调用下载打开函数。

5.在页面中的代码:

<view v-for="(item, index) in data" :key="index">
	<div class="file">
		<div class="name">{{ item.name }}</div>
		<div class="time">{{ item.time }}</div>
		<button class="openfile" @click="download(item.url, item.name)">打开</button>
		<button open-type="share" class="sharefile" type="primary" shape="circle" @click="setSharedItem(item)">分享</button>
	</div>
</view>

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1. Uniapp是什么? Uniapp是一个基于Vue.js开发的多端应用框架,它可以开发出一套代码,同时支持编译成小程序、H5、App等多个平台,实现一次开发,多端部署。 2. 微信小程序是什么? 微信小程序是微信公众平台提供的一种新的应用形态,它不需要下载安装即可使用,具有轻便、快捷的特点,可以在微信中直接使用。 3. Uniapp如何开发微信小程序? 首先,需要在Uniapp中选择微信小程序模板进行项目创建,然后在Uniapp中编写代码,包括页面、组件、API等。最后,使用微信开发者工具将Uniapp项目编译成微信小程序。 4. Uniapp支持哪些微信小程序特性? Uniapp支持微信小程序的大部分特性,包括WXSS样式、WXML模板、JS逻辑代码等。同时,Uniapp还提供了一些特有的API,如跨页面通信、全局变量等。 5. 如何在Uniapp中使用微信小程序的API? 在Uniapp中使用微信小程序的API需要借助Uniapp提供的封装函数。Uniapp封装了一些常用的微信小程序API,如wx.request、wx.showToast等,可以直接Uniapp中调用。 6. 如何在Uniapp中使用微信小程序的组件? 在Uniapp中使用微信小程序的组件需要将组件代码复制到Uniapp中,并进行相应的修改。同时,Uniapp也提供了一些封装好的组件,如uni-list、uni-icons等,方便开发者使用。 7. 如何在Uniapp中使用微信小程序的插件? 在Uniapp中使用微信小程序的插件需要安装插件并进行相应的配置。Uniapp支持使用微信小程序的插件,如wxParse、wxCharts等。 8. 如何在Uniapp中进行微信小程序的调试和发布? 在Uniapp中进行微信小程序的调试和发布需要使用微信开发者工具。开发者可以在Uniapp中进行代码编写和调试,然后使用微信开发者工具将Uniapp项目编译成微信小程序,最后在微信开发者工具中进行测试和发布。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湘裳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值