微信小程序批量上传,下载图片或者特定格式的文件

 不管是上传还是下载,记得先添加域名。微信公众平台--开发管理--开发设置--服务器域名里面的uploadFile合法域名和downloadFile合法域名按需要添加。

一.批量上传图片

参考链接微信小程序wx.uploadFile批量上传_微信小程序多文件上传-CSDN博客

 微信小程序文件实现下载并预览(ios及安卓手机)_移动端附件预览下载-CSDN博客

if (that.data.Sindex == '9') {
  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
},

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值