微信小程序开发---实现文件上传和下载

news/2024/7/20 3:34:07 标签: 微信小程序, 小程序

在开发小程序的过程中,我们难免会遇到使用小程序对后端发送文件;或者接收后端的文件,本文章将手把手带你简单高效实现小程序>微信小程序的文件上传下载功能

前期准备

由于目前小程序保护用户个人隐私力度加大 ,因此我们要想实现文件上传,先要到微信公众平台申请权限,进入设置中的服务内容与声明
在这里插入图片描述

我们在点击更新用户隐私保护指引,在里面我们发现没有找到相应的文件选项,那我们就点击自定义,点击确认之后就会出现选项框供你选择,就按照我下面的填写并且提交之后等待审核通过就可以开发相应的文件上传下载接口
在这里插入图片描述
在这里插入图片描述

文件上传

作者是使用HbuilderX进行开发,但是方法都是一致的,只需要按需更改调用主体就行(例如:wx;uni)

首先是选择文件,小程序>微信小程序上传文件的机制是,先我们用户选取的文件创建一个零时的存放路径,等待我们点击上传的时候就可以直接将上传文件的零时路径携带在网络请求中给后端,此时后端就可以接收到文件,并且在发送文件的时候不是像之前一样使用uni.request(wx.request)而是需要使用formData格式的请求体使用专门的上传方法

需要使用uploadFile方法上传文件,使用formData来存储我们的其他一些JSON格式的数据,比如要让后端知道这是什么文件,是第几个文件之类的信息

<uni-file-picker @select="saveRelatePath" limit="1" file-mediatype="all" title="上传资料"></uni-file-picker>
<!--@select方法是我们选取的文件之后,执行的方法,在我们选取文件之后需要将文件的零时路径进行保存 -->
<button @click="updata" type="primary">确认上传</button>
<script>
export default{
	data(){
		return {
			filePath:''//存放文件的临时目录
		}
	},
	method:{
		saveRelatePath(file){
			this.filePath = path.tempFilePaths[0]//将文件的临时地址保存下来
		},
		updata(){
			var _this = this //保存当前对象指针,用于获取到来刚刚保存的filePath
			uni.uploadFile({
				url: 'https://XXX.XXX.XX/XXX/', // 上传文件的服务器接口地址
				filePath: _this.filePath, // 选择的文件的临时路径
				name: 'file', // 服务器接收文件的字段名
				formData: {
					//放入JSON格式数据
				},
				success: function (res) {
					console.log(res)//打印后端返回的数据
				}
			})
		}
	}
}
</script>

文件下载

一般在开发的时候我们要下载文件一般就是小程序端向后端提供的指定URL接口发送我们要请求哪个文件,一般后端会告诉让你告诉他你要的文件是名字之类的信息。我们如果将这些信息放到请求体data里面无法正确请求文件信息,那么我们这时可能就需要将文件名拼接到之前的URL

<button @click="download">下载 </button>
<script>
export default{
	data(){
		return {
			fileName = 'XXXXXX'
		}
	},
	method:{
		download(){
			const filePath =`${wx.env.USER_DATA_PATH}/test.xlsx`//下载文件存储在当前微信的临时文件夹下,文件名为test,格式为xlsx
				var _this = this
				uni.downloadFile({
					//1.将文件信息放在请求体中
				    //url: 'https://XX/XX/XX' ,
				    //data:{
				    //	fileName = _this.fileName//下载的文件名
				    //},
				    //2.将请求体拼接在URL上
				    //注意有的可能使用斜杠 / 来进行分割有的时需要使用 ?name = "XXX"这种形式,一定要和后端确定号后端时用什么形式接收参数
				    url: 'https://XX/XX/XX/' + _this.fileName,
				    
				    success: function (res) {//文件下载成功使用getFileSystemManager管理文件
						uni.getFileSystemManager().saveFile({//将文件保存到目前零时文件下
				        tempFilePath: res.tempFilePath,
				        filePath: filePath,
				        success: function (res_) {
							if(res.statusCode === 200){//文件保存成功之后就可以打开文件
								uni.openDocument({
									filePath: res_.savedFilePath,
									showMenu: true, // 右上角显示三个点,微信自带的api,可以保存、转发文件
									success: function (res) {
										uni.showToast({
											title: '打开成功'
										});
									},
								})
							}else {//文件没有打开成功就报错提示
								uni.hideLoading()
								uni.showToast({
									icon:"error",
									title: '打开失败'
								});
							}
				        },
				        fail: function (err) {
				            uni.showToast({
				            	icon:"error",
				            	title: '加载失败'
				            });
				        }
				        })
				    }
				})
		}
	}
}
</script>

http://www.niftyadmin.cn/n/5191706.html

相关文章

实力进阶,教你使用thinkphp6开发一款商城系统

0.开篇 你好&#xff01;很高兴你能点开这个教程&#xff0c;相信你对这个教程有了那么一点点兴趣&#xff0c;接下来占用你一点点时间&#xff0c;邀你浏览一下本章内容&#xff0c;希望能够让你更加有兴趣去学完这个教程。 作者我是一名九零后程序员&#xff0c;搬砖了好几…

docker-给用户docker命令权限、无权限/var/run/docker.sock: connect: permission denied

使用普通用户执行docker命令无权限 [testpri00 ~]$ docker ps Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run…

03.webpack中hash,chunkhash和contenthash 的区别

hash、contenthash 和 chunkhash 是通过散列函数处理之后&#xff0c;生成的一串字符&#xff0c;可用于区分文件。 作用&#xff1a;善用文件的哈希值&#xff0c;解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…

木子-前端-方法标签属性小记(普通jsp/html篇)2023~2024

目录 1、如何在前端页面将base转成存进input的图片格式 1、如何在前端页面将base转成存进input的图片格式 不是直接存进input里&#xff0c;只是将文件转成对应的格式。 data.picPath是base64编码&#xff0c;我这边是没有头&#xff0c;所以自定义加了 var file dataURLto…

Google大法好

Google Search Central 前言&#xff1a; google的搜索方式&#xff1a; Google 是一款全自动搜索引擎&#xff0c;会使用名为“网页抓取工具”的软件定期探索网络&#xff0c;以找出可添加到 Google 索引中的网站。实际上&#xff0c;Google 搜索结果中收录的大多数网站都不…

微信小程序开发-----发起网络请求携带后端token

在开发的时候我们前后端一般会有一个token作为安全保护&#xff0c;当后端接收到用户的登录请求&#xff0c;后端就会发送一个token给用户&#xff0c;此时前端必须要将token保存下来&#xff0c;在每次发起网络请求的时候在header请求头里携带token,下面呢就教大家如何在微信小…

系统安全分析与设计>网络攻击

信息系统面临的网络安全威胁 信息系统面临多种类型的网络安全威胁。其中&#xff0c;信息泄露是指信息被泄露或透露给某个非授权的实体&#xff1b;&#xff08; 破坏信息的完整性 &#xff09;是指数据被非授权地进行修改&#xff1b;&#xff08; 拒绝服务 &#xff09;是指…

您采用过哪些课堂教学方法?

您采用过哪些课堂教学方法&#xff1f; □线上/线下混合式教学法 教师利用互联网、移动终端、云计算等现代信息化技术构建线上网络教学平台&#xff0c;学生利用线上网络平台完成自主学习&#xff0c;形成“学生自学教师重点突破”的良性互动的学习与教学方法。 □案例式教学法…