• 小程序上传多张图片


    任务:小程序上传图片到服务器,最多上传三张,前端可以删除图片

    使用到的API有两个:wx.uploadFile wx.chooseImage

    示例WXML:

    <view class="sale after-pic">
      <block wx:for="{{imgList}}" wx:key="{{index}}">
        <view class="pic">
          <image src="{{item}}" />
          <icon type="clear" size="20" catchtap="clearImg" data-id="{{index}}"/>
        </view>
      </block>
      <image src="../../images/upload.png" catchtap="chooseImage" />
    </view>
    <button catchtap="onSub">提交</button>
    

    imgList是wx.chooseImage成功后,返回的图片临时地址

    示例JS

    
    Page({
      data: {
        imgList:[]
      },
      // 使用async await等待图片上传
      onSub: async function() {
        // 点击提交后,开始上传图片
         let imgUrls = []
         for (let index = 0; index < this.data.imgList.length; index++) {
           await this.uploadFile(this.data.imgList[index]).then((res) => {
             // 这里要注意把res.data parse一下,默认是字符串
             let parseData = JSON.parse(res.data)
             imgUrls.push(parseData.data) // 图片地址
           })
         }
         console.log(imgUrls) // 3张图片上传成功后,执行其他操作
      },
      // 删除某张图片
      clearImg: function (params) {
        let imgList = this.data.imgList
        let id = params.currentTarget.dataset.id // 图片索引
        imgList.splice(id, 1) // 删除
        this.setData({
          imgList: imgList
        })
      },
      chooseImage: function (params) {
        wx.chooseImage({
          count: 3, // 做多3张
          sizeType: ['original', 'compressed'],
          sourceType: ['album', 'camera'],
          success: (res) => {
            // 存储临时地址
            this.setData({
              imgList: res.tempFilePaths
            })
          }
        })
      },
      uploadFile: function (filePath) {
        // 返回Promise是为了解决图片上传的异步问题
        return new Promise( (resolve, reject) => {
          wx.uploadFile({
            url: app.globalData.baseUrl + '/file/upload', // 上传地址
            filePath: filePath,
            name: 'file', // 这里的具体值,问后端人员
            formData: {},
            header: {
              "Content-Type": "multipart/form-data"
            },
            success: (res) =>{
              // 图片上传成功后,后端会返回一个地址,可以把它存到imgUrls
              this.imgUrls.push(res.data.data)
            },
            fail:(err) => {
              console.log(err)
            }
          })
        })
      }
    })
    

    特别说明一下,截止我写这篇文章为止,小程序还是不支持async/await语法的,所以需要使用regenerator这个库

  • 相关阅读:
    浏览器返回按钮不会触发onLoad事件
    TCP慢启动算法
    TCP协议三次握手过程分析
    关于新增和编辑
    Mock, 让你的开发脱离接口
    到底数据驱动是个什么玩意
    pagination分页插件
    关于状态切换
    在线占位图网站
    Arduino nano 与 w5500模块的连接与调试
  • 原文地址:https://www.cnblogs.com/yesyes/p/9318392.html
Copyright © 2020-2023  润新知