小程序上傳圖片

1.由於小程序的api描述都比較簡單,並無wxml及wxss的描述,要想實現小程序demo上的上傳圖片樣式首先須要下載weui.wxss並引入到項目中html

小程序版weui下載地址:https://github.com/Tencent/weui-wxssgit

能夠將整個文件下載下來,將其中的dist文件夾導入到獨立的小程序中做爲參考github

把weui.wxss放到本身的項目中後,在app.wxss中import weui.wxss 做爲全局樣式小程序

/**app.wxss**/
@import "weui.wxss";  

照着domo把wxml相關內容複製進本身的文件中api

 <view class="page__bd">
        <view class="weui-cells">
            <view class="weui-cell">
                <view class="weui-cell__bd">
                    <view class="weui-uploader">
                        <view class="weui-uploader__hd">
                            <view class="weui-uploader__title">圖片上傳</view>
                            <view class="weui-uploader__info">{{images.length}}/9</view>
                        </view>
                        <view class="weui-uploader__bd">
                            <view class="weui-uploader__files" id="uploaderFiles">
                                <block wx:for="{{images}}" wx:key="*this">
                                    <view class="weui-uploader__file" bindtap="previewImage" id="{{item}}">
                                        <image class="weui-uploader__img" src="{{item}}" mode="aspectFill" />
                                    </view>
                                </block>
                            </view>
                            <view class="weui-uploader__input-box">
                                <view class="weui-uploader__input" bindtap="chooseImage"></view>
                            </view>
                        </view>
                    </view>
                </view>
            </view>
        </view>
    </view>
 <button bindtap="uploadImg">肯定上傳圖片</button> 

 根據demo修改相關js:數組

 首先實現選擇圖片功能服務器

Page({

  /**
   * 頁面的初始數據
   */
  data: {
    images: [],//臨時圖片地址
  },

  chooseImage: function () {
    var that = this;
    wx.chooseImage({
      count: 9, // 默認9
      sizeType: ['original', 'compressed'], // 能夠指定是原圖仍是壓縮圖,默認兩者都有
      sourceType: ['album', 'camera'], // 能夠指定來源是相冊仍是相機,默認兩者都有
      success: function (res) {
        console.log(res);
        var tempFilePaths = res.tempFilePaths
        that.setData({
          images: that.data.images.concat(tempFilePaths)
        })
   
      }
    })
  },
  previewImage: function (e) {
    wx.previewImage({
      current: e.currentTarget.id, // 當前顯示圖片的http連接
      urls: this.data.images // 須要預覽的圖片http連接列表
    })
  }
 
})

 在此基礎上進行上傳圖片,上傳文件官方方法以下:app

 wx.uploadFile({
      url: 'https://example.weixin.qq.com/upload', //僅爲示例,非真實的接口地址
      filePath: tempFilePaths[0],
      name: 'file',
      formData:{
        'user': 'test'
      },
      success: function(res){
        var data = res.data
        //do something
      }

 發現了尷尬的問題,發現上傳圖片一次只能傳一張dom

參考了https://www.cnblogs.com/xjwy/p/6956120.html的遞歸方法,進行多張圖片的上傳xss

方法以下:

function uploadimg(data) {
  var that=this;
  var i = data.i ? data.i : 0,//要上傳的圖片
    success = data.success ? data.success : 0,//上傳成功的個數
    fail = data.fail ? data.fail : 0;//上傳失敗的個數
  wx.uploadFile({
    url: data.url, //開發者服務器 url
    filePath: data.path[i],
    name: 'file',
    formData: {
      'user': 'test'
    },
    success: function (res) {
      success++;
      //do something
    },
    fail: function () {
      fail++;
    },
    complete: function () {
      i++;
      if (i == data.path.length) {
        console.log("success:" + success + "fail" + fail);
      }else{
        data.i = i;
        data.success = success;
        data.fail = fail;
        uploadimg(data);
      }
    }
  })

} 

點擊上傳按鈕後調用該方法,進行圖片上傳

uploadImg: function (e) {
    var that = this;
    if (that.data.images.length > 0) {
      uploadimg({//調用圖片上傳uploadimg方法
        url:  that.data.upImgUrl,//這裏是你圖片上傳的接口
        path: that.data.images//這裏是選取的圖片的地址數組
      });
    } else {
        console.log("沒有可上傳的文件");
    }
  }

  所有js代碼以下

function uploadimg(data) {
  var that=this;
  var i = data.i ? data.i : 0,//要上傳的圖片
    success = data.success ? data.success : 0,//上傳成功的個數
    fail = data.fail ? data.fail : 0;//上傳失敗的個數
  wx.uploadFile({
    url: data.url, //開發者服務器 url
    filePath: data.path[i],
    name: 'file',
    formData: {
      'user': 'test'
    },
    success: function (res) {
      success++;
      //do something
    },
    fail: function () {
      fail++;
    },
    complete: function () {
      i++;
      if (i == data.path.length) {
        console.log("success:" + success + "fail" + fail);
      }else{
        data.i = i;
        data.success = success;
        data.fail = fail;
        uploadimg(data);
      }
    }
  })

}
Page({

  /**
   * 頁面的初始數據
   */
  data: {
    images: [],//臨時圖片地址
    upImgUrl: 'https://........'//上傳圖片服務器地址
  },

 
  chooseImage: function () {
    var that = this;
    wx.chooseImage({
      count: 9, // 默認9
      sizeType: ['original', 'compressed'], // 能夠指定是原圖仍是壓縮圖,默認兩者都有
      sourceType: ['album', 'camera'], // 能夠指定來源是相冊仍是相機,默認兩者都有
      success: function (res) {
        console.log(res);
        var tempFilePaths = res.tempFilePaths
        that.setData({
          images: that.data.images.concat(tempFilePaths)
        })
      }
    })
  },
  previewImage: function (e) {
    wx.previewImage({
      current: e.currentTarget.id, // 當前顯示圖片的http連接
      urls: this.data.images // 須要預覽的圖片http連接列表
    })
  },
  uploadImg: function (e) {
    var that = this;
    if (that.data.images.length > 0) {
      uploadimg({
        url:  that.data.upImgUrl,//這裏是你圖片上傳的接口
        path: that.data.images//這裏是選取的圖片的地址數組
      });
    } else {
        console.log("沒有可上傳的文件");
    }
  }
})

 小程序還在摸索階段沒實際開發測試過,暫時先記錄下

相關文章
相關標籤/搜索