微信端调取相册和摄像头,实现图片上传,并上传到本地服务器

在微信公众号网页开发时,遇到了图片上传的问题,查看了微信的开发者文档,里面的资料比较全。接着我们看一下整个的流程

1、config权限配置

$.ajax({
    url:‘wx_getConfig‘,
    type:‘get‘,
    dataType:‘json‘,
    async:false,
    success:function(data){
        var appId = data[0].appId;
        var timestamp = data[0].timestamp;
        var nonceStr = data[0].nonceStr;
        var signature = data[0].signature;
        wx.config({
            debug: false,//调试模式   当为tru时,开启调试模式
            appId: appId,
            timestamp: timestamp.toString(),//签名时间戳
            nonceStr: nonceStr, //生成签名的随机串
            signature: signature,//签名
            jsApiList: [‘chooseImage‘,‘uploadImage‘,‘getLocalImgData‘,‘downloadImage‘],
            success:function(){
                alert("配置成功")
            },
            fail:function(){
                alert("配置失败")
            }
        });
    },
    error:function(){
        alert("error");
    }
})

这一步,在调试的时候, 会报config:invalid signature,如果出现这个错误,建议按一下顺序去检查

1.确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。
2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
3.确认url是页面完整的url(请在当前页面alert(location.href.split(‘#‘)[0])确认),包括‘http(s)://‘部分,以及‘?‘后面的GET参数部分,但不包括‘#‘hash后面的部分。
4.确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
5.确保一定缓存access_token和jsapi_ticket。

2、config配置成功

当config配置成功后,就会执行ready函数,所有的操作必须等到config配置完成后才会执行,如果是页面加载就执行的操作,就必须放在ready中执行。如果是在被触发时执行的操作,则不需要放在ready中

wx.ready(function () {
    // 在这里调用 API
    wx.checkJsApi({
      jsApiList: [
        ‘chooseImage‘,
        ‘uploadImage‘,
        ‘getLocalImgData‘,
        ‘downloadImage‘
      ],
      success: function (res) {
        console.log(JSON.stringify(res));
      }
    });
});

3、调取摄像头和相册

function takePicture(nums) {
   wx.chooseImage({
       count: 1,
       needResult: 1,
       sizeType: [‘original‘, ‘compressed‘], // 可以指定是原图还是压缩图,默认二者都有
       sourceType: [‘album‘, ‘camera‘], // 可以指定来源是相册还是相机,默认二者都有
       success: function (data) {
           localIds = data.localIds[0];   // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
           var num1 = nums;
           wxuploadImage(localIds,num1);
           wxgetLocalImgData(localIds,num1);
       },
       fail: function (res) {
           alterShowMessage("操作提示", JSON.stringify(res), "1", "确定", "", "", "");
           }
       });
   }  

4、上传到微信服务器

function wxuploadImage(e,num) {
    var $hiddenImg= $(".hiddenImg");
    wx.uploadImage({
        localId: e, // 需要上传的图片的本地ID,由chooseImage接口获得
        isShowProgressTips: 1, // 默认为1,显示进度提示
        success: function (res) {
            mediaId = res.serverId;
            wxdownloadImage(mediaId)
            $($hiddenImg[num]).val(mediaId);
        },
        fail: function (error) {
            picPath = ‘‘;
            localIds = ‘‘;
            alert(Json.stringify(error));
        }
    });
}
        

此时的图片上传,是将图片上传到微信服务器,我们可以根据获取到的medisId 将图片下载到本地服务器。

5、获取本地图片接口,在本地显示

function wxgetLocalImgData(e,num){
    var $myimg = $(".myimg");
    if(window.__wxjs_is_wkwebview){
     wx.getLocalImgData({
         localId: e, // 图片的localID
         success: function (res) {
              var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
              localData = localData.replace(‘jgp‘, ‘jpeg‘);//iOS 系统里面得到的数据,类型为 image/jgp,因此需要替换一下                     
              $($myimg[num]).attr("src", localData);
         },fail:function(res){
          alert("显示失败");
         }
     });
    }else{
        $($myimg[num]).attr("src", e);

    }
}

此接口仅在 iOS WKWebview 下提供,用于兼容 iOS WKWebview 不支持 localId 直接显示图片的问题

6、提交到本地服务器,实现本地上传

function tijiao(){
    var userInfo = JSON.parse(localStorage.getItem("UserInfoKey"));
    var user = JSON.parse(localStorage.getItem("user"));
    var userId = user.userId;
    var company = userInfo.mainInfo;
    var kfCompanyProvince = userInfo.kfCompanyProvince;
    var kfCompanyCity = userInfo.kfCompanyCity;
    var kfCompanyDistrict = userInfo.kfCompanyDistrict;
    var companyAddress = userInfo.detailAddress;
    var userType = user.userType;
    var userName = userInfo.contacts;
    var principalPhoneCode = userInfo.phone;
    var img1 = $($(".hiddenImg")[0]).val();
    var img3 = $($(".hiddenImg")[1]).val();
    var img5 = $($(".hiddenImg")[2]).val();
    var img6 = $($(".hiddenImg")[3]).val();
    var img7 = $($(".hiddenImg")[4]).val();
     $.ajax({
            url:‘user_uploadInformation‘,
            data:{
                  "userId":userId,
                  "company":company,
                  "kfCompanyProvince":kfCompanyProvince,
                  "kfCompanyCity":kfCompanyCity,
                  "kfCompanyDistrict":kfCompanyDistrict,
                  "companyAddress":companyAddress,
                  "userType":userType,
                  "userName":userName,
                  "principalPhoneCode":principalPhoneCode,
                  "img1":img1,
                  "img3":img3,
                  "img5":img5,
                  "img6":img6,
                  "img7":img7
            },
            type:‘post‘,
            dataType:‘json‘,
            async:false,
            success:function(data){
                if(data.code == 0){
                    mui.alert("认证失败,请重新认证")
                }else if(data.code == 1){
                    mui.alert("申请提交成功,请稍后",function(){
                        window.location.href="../../index/carManLookImg.jsp"
                    })

                }
            },
            error:function(data){
                alert("上传失败")
            }
        })
}

7、总结

根据以上的步骤,简单的调取摄像头和相册实现图片上传的功能就实现了,其实微信平台的开发者文档给我们提供了非常详细的开发者文档,以后可以一起多研究研究。最后附上微信开发者文档链接https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

时间: 2024-10-21 11:06:19

微信端调取相册和摄像头,实现图片上传,并上传到本地服务器的相关文章

微信端wap网页,多个图片上传后编辑的问题

最近参与了一个微信网页端的开发,其中有一个上传多个图片的功能,如下 下方能够添加多张图片,通过thinkPHP的图片上传类接收,将图片名以逗号分隔的形式存在数据库里. 编辑时看起来时好好的 待续..

微信开发之调起摄像头、本地展示图片、上传下载图片

之前那篇微信JS-SDK授权的文章实现了分享接口,那么这里总结一下如何在微信里面通过js调起原生摄像头,以及上传下载图片. 1.配置 页面引入通过jssdk授权后,传入wx对象,首先配置需要的接口 wx.config({ /* debug: true, */ appId: appid, timestamp: timestamp, nonceStr: nonceStr, signature: signature, jsApiList: [ 'chooseImage',//拍照或从手机相册中选图接口

微信端网页中图片的展示方式

一.微信端网页中图片的展示方式 微信端网页中图片有两种展示方式:平铺与图集.平铺的时候文档内的所有图片全部展开,点击图片则放大.图集的时候只展示一张图片,点击图片的时候以翻页的方式展示一组图片.实现原理对于如下一个图片标签,data-gid用于存放组标识,同一组的data-gid相同.data-index用于存放组中图片的展示顺序,不能相同.onclick中根据data-src处理图片展示.对于图集就只显示一张其他的img设置为隐藏,src与第一个图片一样,或者为空,这样可以减少网页的加载量,提

【H5小游戏开发教程】如何限制微信游戏只能在微信端打开?

在这行里接触的时间多了,就会发现很多有意思的东西. 比如,很多微信小游戏会限制只能在微信端打开,有木有? 有这样的, 也有这样的, 妈蛋,不能用PC访问,这游戏就没法扒呀..... 其实涛舅舅告诉你,这两种都可以扒 而且是用PC! 但是今天,我不教你扒皮 我要教你的是,怎么让你的微信游戏也能限制PC打不开 很想学吧  准备开始! 1.第一种不提了,因为人家是设置了微信授权登录,从微信那里就拦截住了,只能用微信访问,你可能弄不了这么高级的微信授权这块,如果你真能弄,这一讲你也不用听了,因为你已经能

如何限制微信游戏只能在微信端打开?

在这行里接触的时间多了,就会发现很多有意思的东西. 比如,很多微信小游戏会限制只能在微信端打开,有木有? 有这样的, 也有这样的, 妈蛋,不能用PC访问,这游戏就没法扒呀..... 其实涛舅舅告诉你,这两种都可以扒 而且是用PC! 但是今天,我不教你扒皮 我要教你的是,怎么让你的微信游戏也能限制PC打不开 很想学吧  准备开始! 1.第一种不提了,因为人家是设置了微信授权登录,从微信那里就拦截住了,只能用微信访问,你可能弄不了这么高级的微信授权这块,如果你真能弄,这一讲你也不用听了,因为你已经能

云瓣影音网站&&微信端(已开源)

随着该项目的发布到线上(小打小闹),即将又要开启另一段崭新的旅程.强迫自己停下来写写所学所得,个人认为总结和分享是一种很棒的学习方式.那让我们先来瞧瞧项目长的什么样.如果着急要源码的朋友,可以下拉到最后~~ 微信端部分展现                从微信端进入网页端的效果(这部分还需要优化(*^__^*))         但是这图是真的还是假的啊,特效蛮酷炫的,不会是被楼主P上去的吧?(第4副图中间那个女孩确实是云云的女同学)嘿嘿,用微信扫这个二维码(是骡子是马拿出来溜溜~~),不过测试

微信公众平台开发[2] —— 微信端分享功能

初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客.问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的学渣一点帮助.-- 前言. 背景介绍: 今天想添加微信分享的功能,如果不进行自定义设计,那么当我们点击分享朋友圈.好友或者QQ好友.空间时,默认的标题就是<title>标签中的信息,而显示的描述信息就是链接,图片多是默认为页面中显示的第一张图片,显然这样的处理是不合理的,所以需要查询开发文档进行编码设计. 操作步骤: 一

Android开发:获得相册图片、拍照、照片上传服务器、从服务器读取照片

文章目录 一 整体功能描述 二 功能实现 1 获得图片 2上传到服务器并保存 3从服务器中获得图片并显示 4Common类中的辅助工具 一. 整体功能描述 通过从相册中选择图片或者拍照的方式获得图片,然后将这个图片上传至服务器,同时实现从服务器上读取该图片. 二. 功能实现 1.1 获得图片 (1)通常情况下,有以下两种方式: 从相册中选择图片 这种方式原理比较简单,就是从SDK中获得照片,转成字节再生产Bitmap对象用于显示即可. 拍照获得图片 拍照获取的图片原理就是先拍照存储,然后再读取,

安卓微信端打开H5页面背景图被键盘挤压移动位置解决

问题:在微信端(安卓浏览器也如此)打开的H5登录页面中,点击输入信息,弹出软键盘会挤压背景图片. 本来的body宽高设置body{width:100%,height:100%},不起作用,这样写就会导致键盘弹出的时候html和body的高度从原来的100%变为(100%-键盘高度).所以要再强行把高度调整回去. 未调整前:背景被挤压,导致下部出现空白背景 调整后: 插入js代码调整高度 1 $(document).ready(function () { $('body').css({'heigh