微信小程序:多张图片上传

最近在写小程序的相册,需要多张图片的上传。因为小程序不支持数组的多张图片同时上传,然后根据自己的需求+借鉴网上各位大神的案例,总算搞定。分享下,不足之处,多多指教哦

页面wxml:

<form bindsubmit="formSumbmit" bindreset="formReset">
 <view class="modal-content">
    <view class="modal-photo">
         <view class="photo-img">
         <view wx:for="{{img_arr}}" wx:key="key">
            <image src='{{item}}'></image>
         </view>
         </view>
    </view>
 </view>
 <view class="modal-footer">
 <view class="btn-confirm" ><button formType="submit" style="color:#00d000;">确定</button></view>
 </view>
</form>

Ps:::img_arr:为存放上传的多张图片的数组,使用for和自动换行显示出来

将本地图片上传js:

upimg: function () {
    console.log('上传图片');
    var that = this;
    if (that.data.img_arr == null) {
        console.log('null张');
        wx.chooseImage({
            count: 9,  //最多可以选择的图片张数,默认为9
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
            success: function (res) {
                console.log(res);
                that.setData({
                    img_arr: res.tempFilePaths     //concat
                });
            }
        })
    }
},

form表单提交,引用跳转:

formSumbmit: function (e) {
    console.log('对话框确认按钮点击事件');
    console.log(e);

    var that = this;
    var data = [];
    data.photo_info = e.detail.value.photo_info;
    data.timestamp = Date.parse(new Date()) / 1000;  //当前时间戳
    data.i = 0;
    that.upload(data);
},

ok,开始将文件上传服务器:

upload: function (e) {
    console.log('上传图片至服务器');
    var photo_info = e.photo_info;
    var timestamp = e.timestamp;
    var i = e.i;
    var that = this;
    var length = that.data.img_arr.length;
    //for (var i = 0; i < length; i++) {//循环遍历图片    //ps::这里也可以使用for循环方式一个个上传,但是因为网络等原因,不能很好地控制,故改用这种重新调用的方式来完成
        var openid = app.globalData.openid;
        wx.uploadFile({
            url: '',//自己的接口地址
            filePath: that.data.img_arr[i],
            name: 'name',
            formData:({//上传图片所要携带的参数
                openid: openid,
                photoInfo: photo_info,
                timestamp: timestamp,
                uploadName: 'name'   //上传name
            }),
        success: function (res) {
            console.log(res);
            if (res) {
                console.log("返回的参数信息" + res.data);
                wx.showToast({
                    title: '上传中...',
                    duration: 3000,
                    icon: 'loading'
                });
            }
        },
        complete:function(){
            console.log(i);
            i++;
            if(i == length){ //当图片传完时,停止调用
                console.log('成功');
                wx.showToast({
                    title: '上传成功!',
                    duration: 1500,
                    success: function(){
                        that.hideModal();
                    }
                });
            }else {
                e.photo_info = photo_info;
                e.timestamp = timestamp;  //当前时间戳
                e.i = i;
                that.upload(e);     //ps::这里也可以使用for循环方式一个个上传,但是因为网络等原因,不能很好地控制,故改用这种重新调用的方式来完成
            }
        }
    })
    //}
},

搞定

猜你喜欢

转载自blog.csdn.net/qq_37461695/article/details/82952372