微信小程序下载文件,保存文件功能总结


前言

总是有需求想在微信小程序里面做下载文件并保存的功能,所以自己整理了一下小程序涉及到下载api,大致理了下在小程序里面下载的流程和解决方案。


一、涉及api

1.wx.saveFile()

​文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFile.html

作用:保存文件到本地。

​注意:
1.该api调用的限制是下载文件最大为10m,且该接口已停止维护。
2.不支持保存后的文件转发,保存后的文件仅支持在小程序内使用。
3.保存的位置是在小程序缓存里面,开发者和用户不需要关心。

2.wx.downloadFile()

​ 文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html

作用:下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径)。
注意:
单次下载允许的最大文件为 200MB。

3.wx.getFileSystemManager().saveFile()

文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html

作用:微信文件管理对象,保存临时文件到本地。
注意:
1.FileSystemManager是微信小程序文件管理器,通过 wx.getFileSystemManager 获取,saveFile()是它提供的一个方法

4.api总结

以上三个api都不能实现真正意义的下载保存,因为微信小程序提供的存储服务是以小程序和用户维度隔离的存储服务,所以下载下来之后用户并不能访问到自己下载的文件。做不到用户下载文件之后可以快捷的找到下载的文件。只是下载到微信app的缓存里面。且微信也不建议开发人员或用户去查询本地文件存储的路径。该结论官方文档也有具体说明:
微信小程序本地文件关系图

文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/file-system.html

二、解决方案

基于以上问题,有以下可实行的解决方案

1.方案一

使用wx.downloadFile() 下载对应文件后,使用fileSystemManager.saveFile API保存文件为图片格式;保存成功后,再使用wx.saveImageToPhotosAlbum保存到相册,然后这个时候我们给出弹窗提醒让用户跑到相册文件中找到对应的文件重命名改掉文件格式。

缺陷:这种方式对iOS某些机型系统不兼容。具体我也没去试,因为后续没有使用该方案。

代码:因为我是用uniapp写的案例,所以代码是这样的,且因为做个示例,代码格式写的层层嵌套,但是大概实现关键代码都在,望各位大佬包容。

			downloadFile(){
				let link = 'https://www.gjtool.cn/pdfh5/git.pdf'
				//下载文件
				wx.downloadFile({
				  url: link,
				  success (res) {
				    if (res.statusCode === 200) {
					  //重新改写文件后缀
				      wx.getFileSystemManager().saveFile({
						  tempFilePath:res.tempFilePath,
						  //wx.env.USER_DATA_PATH 是微信提供了一个用户文件目录给开发者,开发者对这个目录有完全自由的读写权限
						  filePath:`${wx.env.USER_DATA_PATH}/hello.png`,
						    success(res) {
  						    console.log(res.savedFilePath) // res.savedFilePath 为一个本地缓存文件路径
							  //保存图片
							  wx.saveImageToPhotosAlbum({
								  filePath:res.savedFilePath,
							      success(res) {
									  console.log(res)
									  console.log('保存图片成功')
									  //这里可以出个弹窗,给用户提醒,让他去文件管理器里面找到后重命名
								  }
							  })
  						  }
					  })
				    }
				  }
				})
			},

该代码片段在自己的安卓机上测过了,可以实现。

2.方案二

先使用下载文件api把文件下载下来,再使用wx.openDocument() 打开文件里面加上showMenu字段,然后就可以看到在打开的文件右上角出现了···

​ios表现:ios点击之后会有发送给朋友的选项,选择分享给朋友之后就可以把文件直接发送给对方了,然后你就可以在聊天记录里面拿到这个文件;

​安卓表现:安卓手机里面有保存文件的选项;

缺陷:不能 “下载”后直接选择某个文件发给其他人,这个方案每次想发送必须先上小程序找到该文件,下载打开文件再去转发(而且必须是微信好友);或者在之前转发的聊天记录里面找到该文件。

代码:

			downloadFileOpen(){
				let link = 'https://www.gjtool.cn/pdfh5/git.pdf'
				//下载文件
				wx.downloadFile({
				  url: link,
				  success (res) {
				    if (res.statusCode === 200) {
						const filePath = res.tempFilePath
    					wx.openDocument({
    					  filePath: filePath,
						  showMenu:true, //关键点
    					  success: function (res) {
    					    console.log('打开文档成功')
    					  }
    					})
				    }
				  }
				})
			}

安卓具体表现:
安卓转发
ios具体表现:
在这里插入图片描述

总结

其实没啥好说的,仔细看官方文档还是能看到这个“文件下载保存功能”不是我们正常想的下载文件到手机里面,随便可以分享的。后续我们在项目中也是使用的方案二,方案一用户体验不好所以没有考虑了。

注意:因为微信小程序的能力也在不断增加,所以该文章适用于我文章发布时间。

个人水平有限,有问题欢迎大家留言指导,仅供学习和参考。

学海无涯!努力二字,共勉!

转载于:https://blog.csdn.net/qq_37131884/article/details/123360114

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot 是一种轻量级的 Java 应用程序框架,具有在微服务和云原生应用程序中构建可扩展和高效的应用程序的能力。而微信小程序是一种流行的移动应用程序,具有快速和轻量级的特点。在实际开发中,使用 Spring Boot 和微信小程序的结合是非常有意义的。其中,文件上传和下载功能是常用的功能之一。 在 Spring Boot 中实现微信小程序文件上传和下载功能一般需要采用 RESTful 接口实现。具体来说,可以使用 Spring Boot 中的控制器(Controller)和服务(Service)来实现。在前端,可以使用微信小程序的 API 调用上传和下载文件。 对于文件上传功能,可以使用 Spring Boot 中的 MultipartFile 类来获取上传的文件,并进行相关处理。具体的流程如下: 1. 在 Controller 中定义一个上传文件的接口,并指定请求方式、参数等信息。 2. 在 Service 中编写上传文件的逻辑代码,包括文件保存、处理、数据库操作等。 3. 在前端使用微信小程序的 API 调用上传文件功能,并将文件数据发送到后台指定的接口。 对于文件下载功能,一般需要在后台将文件保存在服务器上,并返回文件的链接或数据给前端。具体的流程如下: 1. 在 Controller 中定义一个下载文件的接口,并指定请求方式、参数等信息。 2. 在 Service 中编写下载文件的逻辑代码,包括读取文件、压缩文件、加密文件等。 3. 在前端使用微信小程序的 API 调用下载文件功能,并将文件链接或数据接收并处理。 上述步骤可以参考 Spring Boot 和微信小程序的文档和示例实现。需要注意的是,文件上传和下载功能的具体实现可能会因不同的业务需求而有所差异。因此,在实际开发中需要根据具体情况灵活调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值