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

1. 简介

微信小程序是一种使用JavaScript语言开发的应用程序,微信小程序高度集成于微信环境中,不需要安装即可使用。小程序使用基于组件化的开发方式,模块化编程。小程序还提供了丰富的API,可实现多种功能。其中,小程序文件下载是一种常见的需求。

2. 小程序文件下载

2.1 下载单个文件

下载单个文件,可以使用微信小程序提供的wx.downloadFile()方法。

wx.downloadFile({

url: 'https://example.com/somefile.pdf',

success: function (res) {

wx.saveFile({

tempFilePath: res.tempFilePath,

success: function (res) {

console.log(res.savedFilePath)

}

})

}

})

首先,我们使用wx.downloadFile()方法下载文件,下载完成后通过wx.saveFile()方法将文件储存到小程序本地。其中,wx.downloadFile()方法接受一个对象作为参数,对象中的url属性表示需要下载的文件URL。在下载完成后,我们将下载的文件路径(res.tempFilePath)传递给wx.saveFile()方法,最终保存到小程序本地。

2.2 下载多个文件

要下载多个文件,我们需要封装一个多文件下载的方法,以方便调用。

function multiDownload(urls,successCb,failCb){

let count = 0;

let resultList = [];

urls.forEach(url=>{

wx.downloadFile({

url,

success: function (res) {

resultList.push(res.tempFilePath);

count++;

if(count == urls.length){

successCb && successCb(resultList);

}

},

fail: function(res) {

failCb && failCb(res);

}

})

})

}

该方法接收三个参数:

urls: 文件URL数组。

successCb: 所有文件下载成功后的回调函数,成功下载的文件路径组成的数组将作为参数传递给回调函数。

failCb: 任意文件下载失败后的回调函数,该函数将会接收一个错误对象作为参数。

在该方法中,我们使用一个计数器变量count来记录下载文件的数量,每当下载成功一个文件,我们就将成功的文件路径储存在结果数组中。当下载完成后,我们调用回调函数successCb()并将结果数组作为参数传递给该函数。如果下载过程中任意一个文件下载失败,则调用回调函数failCb()并将错误对象作为参数传递给该函数。

2.3 封装多文件下载的小程序API

上述的多文件下载方法可以作为一个单独的模块使用。我们可以进一步封装该方法,将其作为一个小程序API供其他开发者使用。

function downloadFiles(urls, successCb, failCb) {

const resultList = [];

return new Promise((resolve, reject) => {

multiDownload(

urls,

(list) => {

resultList.push(list);

if (resultList.length === urls.length) {

const flattenList = resultList.reduce((acc, cur) => acc.concat(cur), []);

resolve(flattenList);

successCb && successCb(flattenList);

}

},

(error) => {

reject(error);

failCb && failCb(error);

}

);

});

}

该方法接收三个参数:

urls: 文件URL数组。

successCb: 所有文件下载成功后的回调函数,成功下载的文件路径组成的数组将作为参数传递给回调函数。

failCb: 任意文件下载失败后的回调函数,该函数将会接收一个错误对象作为参数。

可以看到,该方法返回一个Promise对象,成功下载的文件路径组成的数组将作为Promise的resolved值返回。在该方法中,我们首先创建一个结果数组resultList。在multiDownload()方法的回调函数中,我们将每个成功下载的文件路径数组push进resultList中。当resultList中的元素数量等于urls的长度时,说明所有文件下载完成,我们将再次将结果数组扁平化,调用resolve()方法并将扁平化后的结果数组作为参数传递给该方法。如果下载过程中任意一个文件下载失败,则调用reject()方法并将错误对象作为参数传递给该方法。

3. 小结

本文介绍了在微信小程序中下载单个文件和多个文件的方法,以及封装多文件下载为小程序API的方法。多文件下载方法可以大大节省编写代码的时间,提高开发效率。封装后的小程序API具有更高的可读性和可维护性,可以复用于多个项目中,使得项目开发更加快捷。