微信jssdk多图上传

来源:互联网 发布:淘宝卖明星同款 编辑:程序博客网 时间:2024/05/20 22:39

在微信里面开发,我们可以使用微信jssdk 的图片上传

思路基本上是
手机选中图片,上传到微信服务器,加入临时素材库(好像三天就过期了)
然后再服务端去微信的服务器 把图片下载到本地。
如果有自己的cdn,可以在此上传到其他平台。

这里有两个思路

因为当我们选择手机图片时,我们就可以拿到图片了,这个时候页面上可以直接展示图片,但是是手机本身的图片,并没有在自己的服务器,我们并没有这个图片的链接
也可以自己的服务器下载下来之后,返回给前端一个连接,就是上传的图片的链接。但是前端展示就会慢一点

这两个感觉第二个必须比第一个好。但是也看情况。
第一种情况,你可以暂时不拉取微信的临时素材,等到查看的时候再拉取。数据库里面存临时码,再找机会拉取真正的图片。–虽然速度快,但是必须分段处理,在查看之前必须找机会拉取图片

第二种情况时拉取完了 再展示,数据库里面存的就是图片地址–虽然展示效果慢一点,但是存在数据库的都是正常的图片地址。不用再费心处理

开始代码吧

首先必须获取签名,通过这些签名,你才可以去调用jssdk接口

wx.config({    debug: false,    appId: '{pigcms:$signPackage["appId"]}',    timestamp: '{pigcms:$signPackage["timestamp"]}',    nonceStr: '{pigcms:$signPackage["nonceStr"]}',    signature: '{pigcms:$signPackage["signature"]}',    jsApiList: [        // 所有要调用的 API 都要加到这个列表中        'checkJsApi',        'onMenuShareTimeline',        'onMenuShareAppMessage',        'onMenuShareQQ',        'onMenuShareWeibo',        'onMenuShareQZone',        'chooseImage',//选择图片接口        'previewImage',        'uploadImage',//上传图片        'downloadImage'//下载图片    ]});

这是红包雨功能里面多图上传
使用vue来写的。所以里面有很多vue的代码,但是原理是通的
采用的是暂时不下载下来图片。后续下载。

upmoreimage: function () {    var that = this;    var up_num = $('.upimg_box_block li').length;    if (up_num < 3) {        var that = this;        doupload(3 - up_num);    } else {        vm.warn_show('图片最多添加3张',3000);//最多上传三张    }    function doupload(up_num) {        that.$set('moreimages.localId', []);        wx.chooseImage({            count: up_num, //顶部头像最多6张            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有            success: function (res) {   //选择图片成功res为选择的图片// 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片                that.$set('moreimages.localId', res.localIds);                 if (that.moreimages.localId.length == 0) {                    vm.warn_show('请先选择上传图片',3000);                    return;                }                if (that.moreimages.localId.length > 3) {                    vm.warn_show('目前仅支持3张图片上传,请重新上传',3000);                    that.$set('moreimages.localId', []);                    return;                }                var i = 0, length = that.moreimages.localId.length;                upload();                function upload() {                    wx.uploadImage({ 。 //上传图片,每次上传一张,拿着选择图片成功的参数,去上传到微信服务器                        localId: that.moreimages.localId[i],                        isShowProgressTips: 1, // 默认为1,显示进度提示                        success: function (res) {//上传成功,返回一个码,可以去微信服务器获取图片                            i++;                            //怎么把这个给加进去                            var count = [];                            var more_img = that.more_img;                            for (x  in   more_img) {                                if (more_img[x].show == 0 && more_img[x].url == '') {                                    count.push(x);                                }                            }                            if (count.length > 0) {                                var add_num = count[0];                                that.more_img[add_num].url = that.moreimages.localId[i - 1];                                that.more_img[add_num].show = 1;                                that.more_img[add_num].serverId = res.serverId;                            }                            if (i < length) {                                upload();                            }                        },                        fail: function (res) {                            vm.warn_show('上传失败,请重新上传',3000);                        }                    });                }            }        });    }},

遇到的坑

要用最新版的jssdk。因为我们在使用的时候发现,苹果手机展示本地的图片不能显示出来,结果是jssdk升级导致的。