美文网首页
微信jsjdk的照片选择、上传使用

微信jsjdk的照片选择、上传使用

作者: 亻廴聿 | 来源:发表于2018-01-30 15:28 被阅读0次

这里首先默认你已经稍微浏览过微信的文档说明,并完成jdk的config流程。

然后直接把照片选择、上传的两个方法放出来:

function photoSelect(str, num){//照片选择,str为数据指向
    num = !num? 1:num;//单次选择数量,num为空时,单选
    wx.chooseImage({
        count: num,//当num大于9,没有反应,打开调试状态会有超出上限的报错
        sizeType: ['original', 'compressed'],
        success: function (res) {
            var localIds = res.localIds;
            photoUpload(str, localIds);
        }
    });
}
function photoUpload(str, localIds){//照片上传
    var localId = localIds.splice(0, 1);
    //ios专用
    if(localId.indexOf("wxlocalresource") != -1){
        localId = localId.replace("wxlocalresource", "wxLocalResource");
    }
    //当不使用定时器的时候,连续上传1+照片后,会莫明其妙滴不再执行,迫不得已掏出定时器这个大杀器~
    setTimeout(function(){
        wx.uploadImage({//这个玩意一次只能上传一张图片
            localId: localId.toString(),
            isShowProgressTips: 1,
            success: function(res){
                var serverId = res.serverId;
                photoSelectData[str].url(localId,serverId);//这个根据自己需求添加
                //localIds没有传完,即回调函数继续上传
                if(localIds.length >= 1){
                    photoUpload(str, localIds);
                }
            },
            fail: function(res){
                alert('照片上传失败,请稍后再试!');
            }
        })
    },50);
}

功能测试环境是公众平台的测试号。
图片上传,当不使用定时器的时候,连续上传1+照片后,会莫明其妙滴不再执行,知道什么情况的,或者能不使用定时器解决的兄弟情告知我一声。
图片上传中,截取的localId需要使用toString()转换一下才能正确识别。

功能代码完成后,我们来看看数据的处理,分单选和多选两种情况,一起放出来(不含样式,具体使用,还得看具体需求):

//标签
//单张上传样例
<a class="photo-select" data-id="firstPhoto">
    <img src="" id="firstPhoto"/>
</a>
<a class="photo-select" data-id="secondPhoto">
    <img src="" id="secondPhoto"/>
</a>
//多张上传样例
<div class="batch-upload">
    <div class="batch-title">其他照片</div>
    <div class="batch-pic" id="otherPhoto">
    </div>
    <a class="photo-select" data-id="otherPhoto" data-num="9">批量上传</a>
</div>
//微信config处理
wx.ready(function(){
    $('.photo-select').click(function(){
        var $this = $(this);
        var str = $this.attr('data-id');
        var num = $this.attr('data-num')?$this.attr('data-num'):null;
        photoSelect(str, num);
    });
});
wx.error(function(){
    $('.photo-select').click(function(){
        alert('微信权限获取失败,请稍后再试!');
    });
});

//数据处理集合
//包括serverId的信息保存,是否有图片的状态判断,以及图片展示
photoSelectData = {
    //单张上传
    firstPhoto: {
        serverId: '',
        state: false,
        url: function(data,serverId){
            $('#firstPhoto').attr('src',data);
            this.state = true;
            this.serverId = serverId;
        }
    },
    secondPhoto: {
        serverId: '',
        state: false,
        url: function(data,serverId){
            $('#firstPhoto').attr('src',data);
            this.state = true;
            this.serverId = serverId;
        }
    },
    //批量上传
    otherPhoto: {
        serverId: [],
        state: false,
        url: function(data, serverId){
            var html = '<div class="pic">'
                            +'<i class="pic-close" onclick="photoCancel('+"'otherPhoto'"+',this)"></i>'
                            +'<img src="'+data+'">'
                        +'</div>';
            $('#otherPhoto').append(html);
            this.serverId.push(serverId);
            photoSelectData.batchState('otherPhoto');
        },
        //批量上传状态判断
        batchState: function(str){
            if(photoSelectData[str].serverId.length >= 1){
                photoSelectData[str].state = true;
            }else{
                photoSelectData[str].state = false;
            }
        }
    }
}

//多张上传的单张图片删除
function photoCancel(str, obj){
    var $obj = $(obj).parent();
    var $pic = $('#'+str+' .pic');
    var index = $pic.index($obj);
    $pic.eq(index).remove();
    photoSelectData[str].serverId.splice(index,1);
    photoSelectData.batchState(str);
}

相关文章

网友评论

      本文标题:微信jsjdk的照片选择、上传使用

      本文链接:https://www.haomeiwen.com/subject/qskczxtx.html