微信小程序之多文件下载的简单封装

需求

需要生成一个宣传的图片分享到朋友圈,这个宣传图片包含二维码,包含不同的背景图片和不同的文字。对于这种图片生成,我们考虑过使用服务端生成,但是这样会比较耗服务器性能,所以最终决定使用本地生成。

首先小程序有一个限制,包不能大于2m,而且我们可能多个背景图,所以计划把背景图和二维码图片放在服务端,这样可以减少小程序包的大小,也可以灵活的切换背景图。

在绘制分享图的时候,可以直接使用互联网地址,但是遇到了一个问题,有可能不能生成图片,所以我们需要把这个图片文件下载下来。

下载文件的方法微信有API,但是返回的是文件的临时路径,只在小程序本次启动期间可以正常使用,如需持久保存,需在主动调用 wx.saveFile,才能在小程序下次启动时访问得到。

所以我们先把下载文件和保存文件封装

封装下载并且保存一个文件

这个方法比较简单

参数:一个对象,包含
- id 需要下载文件的id,如果不传默认是下载的url,之所以需要id,是因为我们要做多文件下载,可以区分下载的是一个文件
- url 下载文件的网络地址(需要微信小程序后台配置,具体配置方法请参考微信官方文档)
- success 成功回调 返回参数是一个对象 包含 id,savedFilePath
- fail 失败回调 ,下载失败,保存都是都算失败


/*** 下载保存一个文件*/
function downloadSaveFile(obj) {let that = this;let success = obj.success;let fail = obj.fail;let id = "";let url = obj.url;if (obj.id){id = obj.id;}else{id = url;}// console.info("%s 开始下载。。。", obj.url);wx.downloadFile({url: obj.url,success: function (res) {wx.saveFile({tempFilePath: res.tempFilePath,success: function (result) {result.id = id;if (success) {success(result);}},fail: function (e) {console.info("保存一个文件失败");if (fail) {fail(e);}}})},fail: function (e) {console.info("下载一个文件失败");if (fail) {fail(e);}}})
}

使用下载方法(wx.downloadFile(obj))需要在微信小程序配置服务器域名,服务器域名请在 小程序后台-设置-开发设置-服务器域名 中进行配置 ,具体请参考 微信官方文档

封装多文件下载并且保存

多文件下载并且保存,强制规定,必须所有文件下载成功才算返回成功

参数:一个对象,包含

  • urls 下载地址 数组,支持多个 url下载 [url1,url2]
  • success 下载成功 (必须所有文件下载成功才算返回成功) 回调参数 map ,key(id) -> value ({id,savedFilePath})
  • fail 下载失败,只要有一个方法失败就调用失败
/*** 多文件下载并且保存,强制规定,必须所有文件下载成功才算返回成功*/
function downloadSaveFiles(obj) {// console.info("准备下载。。。");let that = this;let success = obj.success; //下载成功let fail = obj.fail; //下载失败let urls = obj.urls;  //下载地址 数组,支持多个 url下载 [url1,url2]let savedFilePaths = new Map();let urlsLength = urls.length;  // 有几个url需要下载for (let i = 0; i < urlsLength; i++) {downloadSaveFile({url: urls[i],success: function (res) {//console.dir(res);//一个文件下载保存成功let savedFilePath = res.savedFilePath;savedFilePaths.set(res.id, res);console.info("savedFilePath:%s", savedFilePath);if (savedFilePaths.size == urlsLength) { //如果所有的url 才算成功if (success){success(savedFilePaths)}}},fail: function (e) {console.info("下载失败");if (fail) {fail(e);}}})}}

完整的download.js文件

/*** 下载管理器* Created by 全科 on 2018/1/27.*//*** 下载保存一个文件*/
function downloadSaveFile(obj) {let that = this;let success = obj.success;let fail = obj.fail;let id = "";let url = obj.url;if (obj.id){id = obj.id;}else{id = url;}// console.info("%s 开始下载。。。", obj.url);wx.downloadFile({url: obj.url,success: function (res) {wx.saveFile({tempFilePath: res.tempFilePath,success: function (result) {result.id = id;if (success) {success(result);}},fail: function (e) {console.info("保存一个文件失败");if (fail) {fail(e);}}})},fail: function (e) {console.info("下载一个文件失败");if (fail) {fail(e);}}})
}
/*** 多文件下载并且保存,强制规定,必须所有文件下载成功才算返回成功*/
function downloadSaveFiles(obj) {// console.info("准备下载。。。");let that = this;let success = obj.success; //下载成功let fail = obj.fail; //下载失败let urls = obj.urls;  //下载地址 数组,支持多个 url下载 [url1,url2]let savedFilePaths = new Map();let urlsLength = urls.length;  // 有几个url需要下载for (let i = 0; i < urlsLength; i++) {downloadSaveFile({url: urls[i],success: function (res) {console.dir(res);//一个文件下载保存成功let savedFilePath = res.savedFilePath;savedFilePaths.set(res.id, res);console.info("savedFilePath:%s", savedFilePath);if (savedFilePaths.size == urlsLength) { //如果所有的url 才算成功if (success){success(savedFilePaths)}}},fail: function (e) {console.info("下载失败");if (fail) {fail(e);}}})}}
module.exports = {downloadSaveFiles: downloadSaveFiles
}

使用

首先导入

import download from "download.js"

之后调用

 let url1 = 'https://xcx.upload.utan.com/article/coverimage/2018/01/25/eyJwaWMiOiIxNTE2ODU2Nzc0Njk3OCIsImRvbWFpbiI6InV0YW50b3V0aWFvIn0=';let url2 = 'https://xcx.upload.utan.com/article/coverimage/2018/01/26/eyJwaWMiOiIxNTE2OTcyNDg0NDUzOSIsImRvbWFpbiI6InV0YW50b3V0aWFvIn0=';download.downloadSaveFiles({urls: [url1, url2],success: function (res) {// console.dir(res);console.info(res.get(url2).savedFilePath)},fail: function (e) {console.info("下载失败");}
);

欢迎关注微信公众号,更多小程序相关的干货等你。。。

全科龙婷

参考

  • https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-file.html#wxdownloadfileobject

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381837.html

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

相关文章

幸运红包娱乐微信小程序源码下载-多玩法安装简单

这是一个相当于一个幸运娱乐游戏微信小程序源码 内有多个玩法,比如超级王牌,福袋王,红牌大师 具体怎么玩小编就不在这多做介绍了 每一个游戏,进入界面后都有一个游戏规则介绍 所以大家看游戏规则就好啦 小程序源码下载地址&#xff1a; &#xff08;已更新&#xff09;幸运红…

性能测试工具——LoadRunner(1)

一、LoadRunner三大组件 1.1每个组件是干什么的 VUG&#xff1a;录制脚本(编写脚本) Controller&#xff1a;设计场景&#xff0c;运行场景 Analysis&#xff1a;产生性能测试报告 1.2三大组件之间的关系 二、LoadRunner脚本录制 2.1了解WebTours系统 启动WebTours&#xf…

Decoupled Knowledge Distillation(CVPR 2022)原理与代码解析

paper&#xff1a;Decoupled Knowledge Distillation code&#xff1a;https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/DKD.py 背景 与基于响应logits-based的蒸馏方法相比&#xff0c;基于特征feature-based的蒸馏方法在各种任务上的表现更…

Cadence 17.4 使用TIPS: Orcad 输出PDF

首先File -> Export -> PDF: PDF Export 设置页面&#xff1a; 其中有4个输出工具供选择&#xff0c;此处我选择第一个Acrobat Distiller, 这个是电脑里安装了咱们常用的Adobe Acrobat DC 就会自带的程序。 &#xff08;如果有同学没装Adobe Acrobat DC或者想用其他工具…

D. Deleting Divisors

传送门&#xff1a;CF 题目如下&#xff1a; 前言&#xff1a; 显而易见&#xff0c;这题是一道博弈题。 初解此题大致思路和标答一致&#xff0c;但还是没有想的很清楚&#xff0c;所以还是没有过。 思路&#xff1a; 在做博弈题的时候&#xff0c;一定要想清楚必胜条件。…

Intel Distiller工具包-量化实现1

本系列文章 Intel Distiller工具包-量化实现1 Intel Distiller工具包-量化实现2 Distiller Distiller是Intel 2019年左右开发的一个支持神经网络压缩的工具包&#xff0c;支持的方法包括 剪枝、量化、蒸馏、低稚分解等&#xff1b;本文介绍Distiller量化方案是如何实现的&am…

【知识蒸馏】Channel-wise Knowledge Distillation for Dense Prediction

文章目录 一、背景二、动机三、方法3.1 回顾 Spatial Distillation3.2 Channel-wise Distillation 四、效果五、训练和测试六、代码解析 论文链接&#xff1a;https://arxiv.org/pdf/2011.13256.pdf 代码链接&#xff1a;https://github.com/irfanICMLL/TorchDistiller MMDet…

Distiller:量化算法

Quantization Algorithms 量化算法 注意: 对于任何需要量化感知训练的以下方法&#xff0c;请参阅这里&#xff0c;了解如何使用Distiller的机制调用它。 基于范围的线性量化&#xff08;Range-Based Linear Quantization&#xff09; 让我们在此分解使用的术语&#xff1a;…

模型压缩工具Distiller-剪枝

1.distiller剪枝模块的使用 &#xff08;1&#xff09;distiller自带剪枝实例测试 distiller自带一些测试实例如ResNet56cifar-10&#xff0c;下面是对ResNet56cifar-10的测试&#xff1a; 测试前准备 yaml文件(注意&#xff1a;这里的yaml文件是coder配置好的&#xff0c;具体…

模型压缩工具Distiller-INT8量化

1.distiller工具介绍 Distiller是一个开源的Python软件包&#xff0c;用于神经网络压缩研究。网络压缩可以减少神经网络的内存占用&#xff0c;提高推理速度并节省能源。Distiller提供了一个PyTorch环境&#xff0c;用于对压缩算法进行原型设计和分析。 主要功能&#xff1a; …

Z3约束器详细学习(0)—Z3安装|语句详解

推荐肉丝r0ysue课程&#xff08;包含安卓逆向与js逆向&#xff09;&#xff1a; 参考资料&#xff1a; Z3 API IN PYTHON 中文文档 1. Z3安装 linux安装Z3 git clone https://github.com/angr/angr-z3.git cd angr-z3 python scripts/mk_make.py cd build make sudo make …

z3求解器(SMT)解各类方程各种逻辑题非常简单直观

各位小伙伴大家好&#xff0c;今天我将给大家演示一个非常高级的工具&#xff0c;SMT求解器。应用领域非常广&#xff0c;解各类方程&#xff0c;解各类编程问题&#xff08;例如解数独&#xff09;&#xff0c;解逻辑题等都不在话下。 今天小小明就将带大家看看这其中的精彩&…

z3学习笔记(有空继续整理)

一、基本语法 Declare-const: 声明给定类型&#xff08;type/ sort&#xff09;的常量 declare-fun&#xff1a;声明一个函数 (declare-fun f (Int Bool) Int)&#xff1a;声明一个接收整型和布尔型两个参数的函数&#xff0c;返回int (define-fun a () Int [val])&#xf…

生成带参数的二维码

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。 首先,创建二维码ticket 参考一下参数 临时二维码请求说明 http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:j…

DH参数例子-SCARA机器人

建议先阅读<上一篇>。 DH参数分配 此处说到的SCARA机器人是KUKA KR10机器人&#xff1a; 它是一个revolute_revolute_prismatic_revolute结构或者简称为RRPR结构&#xff0c;并且所有的关节轴都是平行的。 步骤&#xff11;&#xff1a;从{1&#xff0c;2&#xff0c…

约束求解器-Z3

关于z3 Z3 是一个微软出品的开源约束求解器&#xff0c;能够解决很多种情况下的给定部分约束条件寻求一组满足条件的解的问题&#xff08;可以简单理解为解方程的感觉&#xff0c;虽然这么比喻其实还差距甚远&#xff0c;请勿吐槽&#xff09;&#xff0c;功能强大且易于使用&a…

约束求解器Z3

目录 预备知识1.关于z3 实验目的实验环境实验步骤一实验步骤二实验步骤三 预备知识 1.关于z3 Z3是一个微软出品的开源约束求解器&#xff0c;能够解决很多种情况下的给定部分约束条件寻求一组满足条件的解的问题&#xff08;可以简单理解为解方程的感觉&#xff0c;虽然这么比…

Geomesa-HBase索引篇——Z3索引

目录 1. 概述 2. 原理 2.1 概述 2.2 分片存储机制 2.3 Epoch Week机制 2.4 时空索引机制 2.5 Fid机制 2.6 多个数据的封装 3. 代码实现 3.1 获取分片 3.2 获取Epoch Week 3.3 获取时空索引 3.4 获取Fid 3.5 多个数据的封装 1. 概述 在大量的场景当中&#xff0c…

matlab函数参数不足,调用函数显示输入参数不足

问题描述.png (29.7 KB, 下载次数: 1) 2015-1-27 09:34 上传 %Gauss-Newton算法实现如下 function[x,minf] = GN(f,x0,var,eps)formatlong; ifnargin == 3 %如果没有设置eps,则eps=1.0e-6eps = 1.0e-6; end m = 0; S =transpose(f)*f; %trnspose是转…

mark点Z3学习资料整理

文章目录 Anything is NothingLess is MoreSMTz3 classeslogic programming Reasoning符号推理策略strategiesFixed-point关系代数datalog程序分析验证 Anything is Nothing 前几个月科研用到z3-solver&#xff0c;学习了下&#xff0c;主要注释写在源码上进行学习和试验&…