新建download.js文件放在utils目录,在页面中引入这个js
// 模块对外暴露的接口 module.exports = { //保存文件 saveFile(tempFilePath, fileName, content) { wx.getFileSystemManager().saveFile({ tempFilePath: tempFilePath, filePath: wx.env.USER_DATA_PATH + '/' + fileName, success: function (res) { wx.showModal({ showCancel: false, title: '保存成功', content: content + '已保存至“内部存储/tencent/MicroMsg/wxanewfiles/”的随机文件夹下(文件名:' + fileName + ')' }) }, fail: function (res) { wx.showToast({ title: '保存失败:' + res.errMsg, icon: 'none', duration: 3000 }) } }) }, //下载文件 downloadFile(url) { if (url != undefined && url != '') { var fileName = url.split('/').slice(-1); //获取文件名称 const downloadTask = wx.downloadFile({ url: url, success: function (fes) { wx.hideLoading(); wx.showModal({ title: '提示', content: '请选择保存或打开文件', cancelText: '保存', confirmText: '打开', success(res) { if (res.confirm) { //打开文件 wx.openDocument({ filePath: fes.tempFilePath, success: function (res) { console.log('打开文档成功'); }, fail: function (res) { //文件类型不支持,打开失败后自动保存文件 saveFile(fes.tempFilePath, fileName, '不支持的文件类型,') } }) } else if (res.cancel) { //保存文件 saveFile(fes.tempFilePath, fileName, '文件') } } }) }, fail: function (res) { wx.hideLoading(); wx.showToast({ title: '下载失败:' + res.errMsg, icon: 'none', duration: 3000 }) } }) downloadTask.onProgressUpdate((res) => { wx.showLoading({ title: '已下载:' + res.progress + '%' }) }) } } }
代码执行流程是:弹窗让用户选择打开是保存,选择打开则客户端尝试打开,打开失败则自动保存文件,保存文件目录是微信指定的随机文件夹,文件名保持原来一致。
在页面中使用示例:
//获取应用实例 const app = getApp(); var download = require('../utils/download.js'); Page({ /** * 页面的初始数据 */ data: { url: '/upload/file/2019012912.doc' //附件下载地址 }, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { //执行下载 download.downloadFile(this.data.url); } })
PS:附件下载地址可由wxml页面中的属性获取,看情况使用