微信小程序同时上传多个文件(wx.uploadFile)

小程序同时上传多个文件

使用递归

使用递归有一个问题,如果要上传的东西里,其余参数中有些值只能上传一次,比如日期,在第二次上传的时候会显示此日期已经添加,请勿重复添加,这样就会导致只上传成功第一个文件。

//在network.js中封装
export function docxRequest(url,filePaths,i,length,givename,formData) {
  console.log("我被调用了")
  requestTimes++
  wx.showLoading({
      title: '加载中...',
      mask: true
  });
  return new Promise((resolve, reject) => {
            wx.uploadFile({
              url: baseURL + url, //仅为示例,非真实的接口地址(要上传的地址)
              filePath: filePaths[i],
              name: givename,
              formData: formData,
              header: {'Authorization': "Bearer "+wx.getStorageSync("token"),
                       'content-type': 'multipart/form-data',
                      },
              success: (res) => {
                  console.log("res",res)
                  resolve(res.data)
              },
              fail: (error) => {//客户端网络异常
                  reject(error)
                  wx.showToast({
                      title: '网络异常',
                      duration: 2000,
                      icon: 'none'
                  })
              },
              complete:()=>{
                  i++
                  console.log(i,length)
                  if(i == length){
                      console.log("递归结束")
                      requestTimes--
                      if(requestTimes === 0){
                          wx.hideLoading();
                      }
                  }else{
                    // 递归调用
                    console.log("递归调用")
                    requestTimes--
                    docxRequest(url,filePaths,i,length,givename,formData).then(resolve).catch(reject)
                  }
              }
            })
  })

}
//在要使用的页面调用
//docUrl内存的是要上传的文件的地址的数组,0代表从数组的第一个值开始上传,params为除了文件地址的其余参数
 docxRequest(url, docxUrl,0,docxUrl.length,
        "interview_file", params).then((res) => {
         console.log("------res", res)
         var resObj = JSON.parse(res);
         console.log(resObj)
         if (resObj.code == 0) {
         showToast('提交成功')
         this.getPage()
         } else {
           showToast(resObj.msg)
         }
       })

小程序中导入Multipart.min.js

Multipart.min.js提取链接:
链接:提取Multipart.min.js
提取码:xxqd

//示例
  var files = [{
  name:'key',
  filePath:img1
  },{
  name:'key',
  filePath:img2
  }]  
   
  var fields = [{
  name:'userId',
  value:1
  },{
  name:'userName',
  value:'zhangsan'
  },{
  name:'time',
  value:'2023-07-29'
  }]
  
 new Multipart({
      files,
      fields
    }).submit(url,{header: {
          'Authorization': "Bearer " + wx.getStorageSync("token"),
          'content-type': 'multipart/form-data',
        }
      }
    ).then((res) => {
    //请求成功
      console.log(res)
      console.log(res.data.code)
      if (res.data.code == 0) {
        showToast('提交成功')
      } else {
        showToast(res.data.msg)
      }
    }).catch((e) => {
       wx.showToast({
        icon:'none',
        title: '提交失败'
      })
    })
//自己项目使用的代码片段
    var docxUrl = this.data.docxPaths
    console.log('docxUrl', docxUrl)

    let fields = Object.keys(params).map(key => ({
      name: key,
      value: params[key]
    }))   //将[{username:"zhangsan",age:15}]这样的形式转化为[{username:"zhangsan"},{age:15}]
    console.log("其余参数", fields)
    let files = docxUrl
    console.log("附件地址", files)
    //上传附件
    files.map((item, index) => {
      return Object.assign(item, { name: 'interview_file', filePath: item.filePath })
    })    //将[{filePath:"http://...."},{filePath:"http://..."}]这样的形式转化为[{name:'interview_file',filePath:"http://...."},{name:'interview_file',filePath:"http://..."}],其中name值为wx.uploadFile中的key值
    //上传图片
    var uploadImage
    if (this.data.compressImage.length == 1) {
      uploadImage = this.data.compressImage.map(tempPath => ({
        filePath: tempPath
      }))  //将['http://....','hettp://...']这样的数组形式转化为数组里是对象的形式[{filePath:'http://...'},{filePath:'http://...'}]
      uploadImage.map((item, index) => {
        return Object.assign(item, { name: 'interview_photo', filePath: item.filePath })
      })
      files = files.concat(uploadImage)
    }

    console.log("图片和附件", files)
    new Multipart({
      files,
      fields
    }).submit(url,
      {
        header: {
          'Authorization': "Bearer " + wx.getStorageSync("token"),
          'content-type': 'multipart/form-data',
        }
      }
    ).then((res) => {
      console.log(res)
      console.log(res.data.code)
      if (res.data.code == 0) {
        wx.hideLoading()
        showToast('提交成功')
        this.getPage()
      } else {
        showToast(res.data.msg)
      }
    }).catch((e) => {

    })
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值