网站首页 > 技术文章 正文
最近给公司的微信小程序增加下载文件和扫描二维码关联的功能,踩了一些坑,这里做一下总结,希望对大家有所帮助。
一、文件下载
1、在微信小程序里进行网络通信,只能和指定的域名进行通信,需要在微信小程序后台配置对应的域名,否则无法访问。
微信小程序包括四种类型的网络请求
- 普通HTTPS请求(wx.request)
- 上传文件(wx.uploadFile)
- 下载文件(wx.downloadFile)
- WebSocket通信(wx.connectSocket)
接下来,会主要介绍下wx.downloadFile的使用。
DownloadTask wx.downloadFile(Object object)
wx.downloadFile方法下载文件资源到本地。客户端直接发起一个 HTTPS GET请求,返回文件的本地临时路径 (本地路径),单次下载允许的最大文件为200MB,我们自己业务做了50M的限制。基本使用方法如下:
wx.downloadFile({
url: 'https://example.com/test.pdf', //仅为示例,并非真实的资源
success (res) {
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调
if (res.statusCode === 200) {
console.log(res.tempFilePath)//打印临时本地临时路径
}
}
})
wx.downloadFile方法返回一个DownloadTask的对象,DownloadTask对象是一个可以监听下载进度变化事件,以及取消下载任务的对象。DownloadTask对象的方法有:
- DownloadTask.abort() 中断下载任务
- DownloadTask.onProgressUpdate(function callback) 监听下载进度变化事件
- DownloadTask.offProgressUpdate(function callback) 取消监听下载进度变化事件
- DownloadTask.onHeadersReceived(function callback) 监听 HTTP Response Header 事件。会比请求完成事件更早
- DownloadTask.offHeadersReceived(function callback) 取消监听 HTTP Response Header 事件
这里主要介绍下,我自己用到的几个。DownloadTask.onProgressUpdate可以下载进度,获取下载百分比、已经下载字节数和总共字节数。
//官方的例子
downloadTask.onProgressUpdate((res) => {
console.log('下载进度', res.progress)
console.log('已经下载的数据长度', res.totalBytesWritten)
console.log('预期需要下载的数据总长度', res.totalBytesExpectedToWrite)
})
downloadTask.abort() 这个方法可以取消下载任务,但是有坑,downloadTask.abort() 调用不起作用。因为我遇到的场景是,想通过建立下载连接,获取文件大小,发现在onProgressUpdate里获取文件大小后调用downloadTask.abort() 是无法停止下载任务的,通过其他按钮调用downloadTask.abort() 也是不行的。最后经过一番探索,发现在DownloadTask.onHeadersReceived(function callback)方法里,通过Header的Content-Length字段可以获取大小,同时调用downloadTask.abort()效果还不错。
文件下载之后我们可以在success回调里拿到本地临时路径,然后调用系统的预览方法打开文档。我本地的代码如下:
wx.openDocument({
showMenu: true,
fileType: 'pdf',
filePath: res.tempFilePath,
success: function (res) {
console.log('打开文档成功', res)
},
fail: function (res) {
console.log('打开文档失败', res)
}
})
wx.openDocument(Object object) 系统方法用于新开页面打开文档,这个功能主要就是我们常用的保存文件到手机的选项。如图
参数说明:
- filePath 文件路径 (本地路径) ,前面通过 downloadFile 获取的res.tempFilePath
- showMenu 是否显示右上角菜单
- success和fail 打开文件成功或者失败的回调
- fileType 文件类型,指定文件类型打开文件
- fileType支持打开的类型如下
doc doc格式文件
docx docx格式文件
xls xls格式文件
xlsx xlsx 格式文件
ppt ppt格式文件
pptx pptx格式文件
pdf pdf格式文件
二、扫普通链接二维码打开小程序
这个功能就是扫描二维码,如果信息是配置过的会自动打开小程序然后进行对应的业务处理。
首先我们要在微信小程序后台添加规则,在开发版本里的开发设置模块,在设置访问域名的部分下面,找到“扫普通链接二维码打开程序”,如下图,我设置了3个规则是体验版的。
我们点击右上角的添加,就进入了设置规则页面,具体规则大家可以微信小程序官网查询
根据二维码跳转规则,我们需要填写需要跳转小程序的二维码规则。要求如下:
- 二维码规则的域名须通过ICP备案的验证,还需要放置校验文件
- 支持http、https、ftp开头的链接
- 一个小程序帐号可配置不多于10个二维码前缀规则。
在小程序后台配置二维码跳转小程序规则之后即可使用微信扫码打开小程序,那么参数如何处理呢?二维码链接内容会以参数q的形式带给页面,在onLoad事件中提取q参数并自行decodeURIComponent一次,即可获取原二维码的完整内容,具体代码如下
onLoad(query) {
if (query.q && query.q !== 'undefined') {
var url = decodeURIComponent(query.q)
//进行业务处理
}
}
这个功能本来不复杂,因为我们公司只放行线上环境,导致我这边申请放置校验文件流程比较曲折,好在最后都解决了。
大家如果有疑问或者有比较好的方法可以留言交流。
猜你喜欢
- 2024-12-23 Alpine.js 如何火起来的!比 React/Vue 如何?
- 2024-12-23 萤火商城v2_2.0.8开源版saas平台小程序+uniapp前端
- 2024-12-23 微信小程序3d学习(一):实时人脸检测3D抽取的独立工程
- 2024-12-23 【小程序】如何简单生成海报,P8大佬路过点赞
- 2024-12-23 微信小程序,实现Echarts,并获取数据渲染
- 2024-12-23 微信小程序开发工具及前端不显示图片问题解决办法
- 2024-12-23 uni-app + uniCloud纯前端重构一个零食类分销电商小程序(一)
- 2024-12-23 学前端怎能不知css系列-css初识 前端不会css
- 2024-12-23 「融职培训」Web前端学习 第10章 小程序开发2 微信开发者工具介
- 2024-12-23 小程序商城开发前端怎么做 小程序商城开发前端怎么做的
你 发表评论:
欢迎- 05-30为什么说网上的md5加密解密站都是通过彩虹表解密的?
- 05-30一文读懂md5,md5有什么用,什么是md5加盐
- 05-30Java md5加密解密数据
- 05-30MD5是什么?如何进行MD5校验?
- 05-30专家教你简单又轻松的MD5解密方法,一看就会
- 05-30多学习才能多赚钱之:vscode怎么安装插件
- 05-30VSCode无限画布模式(可能会惊艳到你的一个小功能)
- 05-30VSCode神级Ai插件Cline:从安装到实战【创建微信小程序扫雷】
- 477℃几个Oracle空值处理函数 oracle处理null值的函数
- 471℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 468℃Oracle分析函数之Lag和Lead()使用
- 456℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 450℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 447℃【数据统计分析】详解Oracle分组函数之CUBE
- 426℃Oracle有哪些常见的函数? oracle中常用的函数
- 424℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)