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

news2024/11/15 9:14:24

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

前期准备

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

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

文件上传

作者是使用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.coloradmin.cn/o/1223352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PLC的自动洗碗机控制系统(论文+源码)

1.系统设计 本课题基于PLC的自动洗碗机控制系统&#xff0c;在此将主要功能设定如下&#xff1a; 通过上下喷头旋转喷水湿润餐具&#xff1b;添加洗涤剂&#xff08;洗碗液&#xff09;&#xff1b;上下喷头喷水洗涤餐具&#xff1b;排出污水&#xff1b;往碗碟上喷洒更多的水…

在c#中如何将多个点位(Point)转换为多边形(Polygon)并装换为shp图层

&#x1f47b;如图&#xff0c;我现在有一组经纬度点位Point&#xff0c;接下来我们将他装换为多边形Polygon格式 &#x1f47b;使用QGIS > 图层 > 添加图层 > 添加分隔文本图层 > 打开这个csv点位文件 &#x1f47b;打开后如左下图&#xff0c;csv文件中的四个点位…

突发!“ChatGPT 之父”奥特曼被 OpenAI 开除!!乔布斯故事重演了?

重磅消息&#xff01; OpenAI刚刚官宣领导层换届&#xff0c;SamAltman辞任CEO并离开董事会&#xff0c;原CTO Mira Murati 任命为临时CEO&#xff0c;并正在进行寻找永久继任CE0。 大模型研究测试传送门 GPT-4传送门&#xff08;免墙&#xff0c;可直接测试&#xff0c;遇浏…

MIUI解锁BL

解锁BL锁会清空手机数据!!! 解锁工具下载: http://www.miui.com/unlock/download.html 解压运行.exe文件 注意点: 手机绑定的账号与解锁工具登录的账号应是同一个账号 在Fastboot界面, 一直无法显示连接手机 USB3.0接口的问题, 巨坑!!! 解决方案参考下面第二篇文章 参考文…

代码随想录算法训练营第25天|216.组合总和III 17.电话号码的字母组合

JAVA代码编写 216. 组合总和III 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k …

uview使用u-action-sheet添加滚动条

0 效果 1 修改uview源码 node_modules/uview-ui/u-action-sheet/u-action-sheet.vue

vb.net U盘或移动硬盘 插入 自动(静默)复制指定格式文件

U盘或移动硬盘 插入 自动复制指定格式文件至系统盘符 开发语言&#xff1a;vb.net 重要申明&#xff1a;该程序只是防止本人不在电脑旁时&#xff0c;别人偷偷copy你的电脑文件&#xff0c;让他偷鸡成了也要蚀把米。严禁从事黑客或违反道德等不良行为&#xff0c;故而不发布程…

TURN 协议

TURN 地址分配 抓包过程 TURN 连接建立 这里指的是 Client 收到对端从 TURN 分配的 IP 和 端口 &#xff0c;和对端的 TURN 和 IP 绑定的过程 CreatePermission Request 等消息&#xff0c;都会携带有对端的 TURN 和 IP 抓包过程

4月2日-3日·上海 | 3DCC 第二届3D细胞培养与类器官研发峰会携手CGT Asia 重磅来袭

类器官&#xff08;Organoids&#xff09;作为干细胞研究领域最重要的成果之一&#xff0c;在基础医学研究、转化医学及药物研发领域展现出巨大的应用潜力&#xff0c;特别是在精准医疗以及药物安全性和有效性评价等方向凭借其先天优势引起了极大的市场关注&#xff0c;成为各大…

asp.net心理健康管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 asp.net 心理健康管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 系统视频链接 https://www.bilibili.com/video/BV19w411H7P4/ 二、功能介绍 本系统使用Microsoft Visual Studio…

LeetCode热题100——图论

图论 1. 岛屿的数量2. 腐烂的橘子 1. 岛屿的数量 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆…

山西电力市场日前价格预测【2023-11-18】

1.日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-18&#xff09;山西电力市场全天平均日前电价为202.44元/MWh。其中&#xff0c;最高日前电价为346.71元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计…

可逆矩阵的性质

如果矩阵A可逆&#xff0c;那么它的逆矩阵也可逆&#xff0c;并且如果矩阵A可逆&#xff0c;假设是一个不为0的数&#xff0c;那么也可逆&#xff0c;并且如果矩阵A和都可逆&#xff0c;而且它们的阶数也相同&#xff0c;那么它们的乘积也是可逆的&#xff0c;并且如果矩阵A可逆…

适用于 Windows 的 10 款最佳数据恢复工具

在数字时代&#xff0c;数据就是一切。 从珍贵的家庭照片和重要的工作文件到我们最喜欢的音乐和电影&#xff0c;我们的生活存储在越来越多的不同设备上。 系统崩溃、意外删除或恶意病毒都可能导致有价值的数据在瞬间丢失。 这就是数据恢复工具的用武之地。 适用于 Windows 的 …

为什么C++标准库中atomic shared_ptr不是lockfree实现?

为什么C标准库中atomic shared_ptr不是lockfree实现&#xff1f; 把 shared_ptr 做成 lock_free&#xff0c;应该是没有技术上的可行性。shared_ptr 比一个指针要大不少&#xff1a;最近很多小伙伴找我&#xff0c;说想要一些C的资料&#xff0c;然后我根据自己从业十年经验&am…

Unity3D 解决相机拉高之后物体阴影消失

在Edit-Project Settings-Quality中找到Shadow Distance&#xff0c;将其调大即可

【mysql】2006 - Server has gone away

执行了一组插入语句 提示&#xff1a;2006 - Server has gone away&#xff1b; 2006-服务器已经消失&#xff1b; 消失去哪里了&#xff0c;被黑洞吞没了吗&#xff1f;&#xff01;&#xff01;&#xff01; 网络问题 网络不稳定&#xff1f;断网了&#xff1f;检查网络连…

Redis数据的持久化

Redis的持久化有两种方式&#xff1a; RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only File&#xff09; 目录 一、RDB 保存方式 2、rdb在redis.conf文件中的配置 二、AOF 1、保存方式 2、aof方式持久化在redis.conf文件中的配置 三、持久化建…

STM32/N32G455国民科技芯片驱动DS1302时钟---笔记

这次来分享一下DS1302时钟IC&#xff0c;之前听说过这个IC&#xff0c;但是一直没搞过&#xff0c;用了半天时间就明白了原理和驱动&#xff0c;说明还是很简单的。 注&#xff1a;首先来区分一下DS1302和RTC时钟有什么不同&#xff0c;为什么不直接用RTC呢&#xff1f; RTC不…

KofamScan-KEGG官方推荐的使用系同源和隐马尔可夫模型进行KO注释

文章目录 简介安装使用输入蛋白序列输出detail-tsv格式输出detail格式输出mapper格式 输出结果detail和detail-tsv格式mapper格式常用命令tmp目录 与emapper结果比较其他参数参考 简介 KofamScan 是一款基于 KEGG 直系同源和隐马尔可夫模型&#xff08;HMM&#xff09;的基因功…