微信jssdk上传图片
作者: thtomatic 分类: JavaScript 评论: [ 0 ] 条 浏览: [ 828 ] 次
本代码在Tp3.2.3上运行成功,若是其他框架 文中的PHP代码可能不会适用,HTML和Javascript代码不受影响,仅作参考!
Html代码:
<div class="yxg-margin-horizontal-sm">
<div class="list-textarea clearfix">
<textarea class="yxg-initiate-content " cols="50" placeholder="请详细描述你所遇到的问题(不少于20个字),以便TA能够详细了解你的问题,给出针对性的回答。" rows="10" id="content"></textarea>
<div class="col-xs-3">
<img src="/bootstrap/img/img-tjtp.png" style="margin: 5px auto" class="img-responsive yxg-initiate-img " alt="" onclick="add_imgs()">
</div>
<div class="row clearfix" id="WxImgBox">
</div>
</div>
</div>
Javascript代码:
<script src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script>
var wx_ok=false;
var conf = JSON.parse('{$wx_js_sign|json_encode=###,true}');
conf.debug = false;
//初始化JS-SDK
JsSdk_Config(conf);
//检测 JS-SDK 能否正常使用
wx.ready(function () {wx_ok=true;})
function JsSdk_Config(conf) {
wx.config({
debug: conf.debug, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: conf.appId, // 必填,公众号的唯一标识
timestamp: conf.timestamp, // 必填,生成签名的时间戳
nonceStr: conf.nonceStr, // 必填,生成签名的随机串
signature: conf.signature,// 必填,签名
jsApiList: ['startRecord','stopRecord','onRecordEnd','playVoice','pauseVoice','stopVoice','uploadVoice','downloadVoice','chooseImage','previewImage','uploadImage','downloadImage','getNetworkType','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ']
});
}
var wechat_img_id = new Array();
function add_imgs(count = 9,sizeType=['original', 'compressed'],sourceType=['album', 'camera']) {
if(!wx_ok)
{
showMsg('微信还没准备好');
return;
}
wx.chooseImage({
count: count, // 默认9
sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有
sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
Wechat_Upload(localIds);
}
});
}
//微信端上传图片
function Wechat_Upload(localIds) {
if (!localIds.length) {
return;
} else {
if(wechat_img_id.length < 11)
{
var localId = localIds.pop();remove_img("sss")
wx.uploadImage({
localId: localId,
isShowProgressTips: 1,
success: function(res_data) {
var serverId = res_data.serverId;
wechat_img_id.push(serverId);
var that_box = $('#WxImgBox');
var html='<div class="col-xs-3 remove_class" onclick="remove_img(\''+serverId+'\')"><img src="'+ localId+'" style="margin: 5px auto" class="img-responsive yxg-initiate-img " alt="" ></div>';
that_box.append(html);
Wechat_Upload(localIds);
}
});
}else{
showMsg('最多上传11张图片');
}
}
}
//移除上传的图片
function remove_img(sid) {
$('.remove_class').on('click',function () {
$(this).remove();
})
removeByValue(wechat_img_id,sid);
}
//删除数组中的值
function removeByValue(arr, val) {
for(var i=0; i<arr.length; i++) {
if(arr[i] == val) {
arr.splice(i, 1);
break;
}
}
}
</script>
后端使用PHP:
用到一个类:TPWechat(点击下载)
protected function Wechat_img($img)
{
$options=array('token'=>$this->_config['weixin_token'],'encodingaeskey'=>$this->_config['weixin_encodingaeskey'],'appid'=>$this->_config['weixin_appid'],'appsecret'=>$this->_config['weixin_secret']);
$wechatObj=new \Org\Net\TPWechat($options);
$w_img=array();
try {
foreach($img AS $k => $v) {
$media_file=$wechatObj->getXhjMedia($v,false);
if($media_file!==false){
$img_thumb=imgThumb($media_file,300,500);
$w_img[]=array("type"=>"image","img"=>$media_file,"thumb"=>$img_thumb);
}
}
$data['status'] = 1;
$data['data'] = $w_img;
} catch (Exception $err) {
$data['status'] = 0;
$data['info'] = '文件错误:'.$err->getMessage();
}
return $data;
}
期间遇到了一个坑,就是使用'chooseImage'方法后得到localIds再用for循环执行'uploadImage'的方法导致每次都是第一张图片在上传,因为异步的问题所以js代码改成了 最后这个样子 解决了这个异步问题
版权所有:《thtomatic》 => 《微信jssdk上传图片》
本文地址:https://ask.mykeji.net/JavaScript/223.html
除非注明,文章均为 《简单记录》 原创,欢迎转载!转载请注明本文地址,谢谢。
发表评论: