不管是上传还是下载,记得先添加域名。微信公众平台--开发管理--开发设置--服务器域名里面的uploadFile合法域名和downloadFile合法域名按需要添加。
一.批量上传图片
参考链接微信小程序wx.uploadFile批量上传_微信小程序多文件上传-CSDN博客
微信小程序文件实现下载并预览(ios及安卓手机)_移动端附件预览下载-CSDN博客
// 上传图片
chooseImg() {
wx.chooseImage({
success: function (o) {
var e = o.tempFilePaths;
var successUp = 0; //成功
var failUp = 0; //失败
var length = e.length; //总数
var count = 0; //第几张
var filePath = that.data.List; //存储每次上传文件的路径
let list = []
for (let i = 0; i < e.length; i++) {
list.push({
url: e[i],
content: e[i],
type: '4'
})
}
that.uploadOneByOne(list, successUp, failUp, count, length, filePath);
wx.hideLoading()
}
})
},
/*** 采用递归的方式上传 */
uploadOneByOne(imgPaths, successUp, failUp, count, length, filePath) {
var that = this;
wx.showLoading({
title: '正在上传第' + count + '张',
})
wx.uploadFile({
url: that.data.httpServer+ "/file/upload",
filePath: imgPaths[count].url,
name: "file",
success: function (e) {
var o = JSON.parse(e.data);
filePath.push({
url: o.fileUrl,
content: o.fileUrl,
type: '4'
})
successUp++; //成功+1
},
fail: function (e) {
failUp++; //失败+1
},
complete: function (e) {
count++; //下一张
if (count == length) {
//上传完毕,作一下提示
const _k1 = `List` // 拼接动态属性
that.setData({
[_k1]: filePath,
})
that.setData({
Info: that.data.Info
})
wx.showToast({
title: '上传成功',
icon: 'success',
duration: 2000
})
} else {
//递归调用,上传下一张
that.uploadOneByOne(imgPaths, successUp, failUp, count, length, filePath);
}
}
})
}
二.下载图片或者特定格式的文件
删除本地文件是一定要的。另外toLowerCase把文件后缀转小写有时候不准,我还是把文件大小写都加上判断了
// 点击事件
downloadFile(event) { // event为当前点击的事物对象
let downloadUrl = event.currentTarget.dataset.url
let fileName = event.currentTarget.dataset.filename
// 加载状态
wx.showLoading({
title: '文件打开中',
mask: true
});
let that = this;
const fileExtName = that.getfileName(fileName)
// 下载图片
if (fileExtName == '.jpg' || fileExtName == '.png' || fileExtName == '.jpeg' || fileExtName == '.JPG' || fileExtName == '.PNG' || fileExtName == '.JPEG') {
wx.downloadFile({
url: downloadUrl, //图片地址
success: function (res) {
//保存图片到系统相册
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath, //图片文件路径
success: function (data) {
wx.hideLoading(); //隐藏 loading 提示框
wx.showModal({
title: '提示',
content: '保存成功',
modalType: false,
})
},
// 接口调用失败的回调函数
fail: function (err) {
if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
wx.showModal({
title: '提示',
content: '需要您授权保存相册',
modalType: false,
success: modalSuccess => {
wx.openSetting({
success(settingdata) {
wx.hideLoading();
console.log("settingdata", settingdata)
if (settingdata.authSetting['scope.writePhotosAlbum']) {
wx.showModal({
title: '提示',
content: '获取权限成功,再次点击图片即可保存',
modalType: false,
})
} else {
wx.showModal({
title: '提示',
content: '获取权限失败,将无法保存到相册哦~',
modalType: false,
})
}
},
fail(failData) {
wx.hideLoading();
console.log("failData", failData)
},
complete(finishData) {
wx.hideLoading();
console.log("finishData", finishData)
}
})
}
})
}
},
complete(res) {
wx.hideLoading();
}
})
}
})
} else {
// 下载文件
const randfile = fileName // new Date().getTime() + fileExtName;
const newPath = `${wx.env.USER_DATA_PATH}/${randfile}`;
that.deletContract();
wx.downloadFile({
url: downloadUrl,
filePath: newPath,
success: function (res) {
wx.hideLoading();
const filePath = res.tempFilePath;
const types = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'DOC', 'DOCX', 'XLS', 'XLSX', 'PPT', 'PPTX', 'PDF']
const fileType = types.find(i => fileName.endsWith(i))
wx.openDocument({
filePath: newPath,
showMenu: true,
fileType: fileType,
success: function (res) {
wx.hideLoading();
}
})
},
fail: function (res) {
wx.hideLoading();
}
})
}
},
// 删除本地文件
deletContract() {
try {
let file = wx.getFileSystemManager();
file.readdir({
dirPath: `${wx.env.USER_DATA_PATH}`,
success: res => {
console.log(res);
if (res.files.length > 2) {
file.unlink({
filePath: `${wx.env.USER_DATA_PATH}/${res.files[0]}`,
complete: res => {
}
})
}
}
})
} catch (error) {
}
},
// 截取文件后缀
getfileName(filename) {
// 转换为小写
const pos = filename.toLowerCase().lastIndexOf('.')
let suffix = ''
if (pos !== -1) {
suffix = filename.substring(pos)
}
return suffix
},