ThinkPHP微信开发实例——JSSDK图像接口上传下载并将图片流写入本地

前端

<div>
    <img class="preview" src="{$ig'}" style="width: 250px;"/>
    <button class="uploadImage" type="button" id="vt">点击上传</button>
    <input id="ig" type="hidden" name="media_id" value="{$ig}">
</div>
<script type="text/javascript" src="/jweixin-1.0.0.js"></script>
<script>
  wx.config({
    debug: false,
    appId: '<?php echo $signPackage["appId"];?>',
    timestamp: <?php echo $signPackage["timestamp"];?>,
    nonceStr: '{$signPackage["nonceStr"]}',
    signature: '{$signPackage["signature"]}',
    jsApiList: [
      /* 所有要调用的 API 都要加到这个列表中*/
	  'chooseImage',
	  'previewImage',
	  'uploadImage',
	  'downloadImage'
    ]
  });
  wx.ready(function() {
    //手机相册选图或拍照
    var images = {
        localId: [],
        serverId: []
    };
    //上传图片
    $(".uploadImage").click(function() {
        var that = $(this);
        images.localId = [];
        wx.chooseImage({
            success: function(res) {
                images.localId = res.localIds;// 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
                if (images.localId.length == 0) {
                    alert('请先使用 chooseImage 接口选择图片');
                    return;
                }
                if (images.localId.length > 1) {
                    alert('目前仅支持单张图片上传,请重新上传');
                    images.localId = [];
                    return;
                }
                var i = 0,
                length = images.localId.length;
                images.serverId = [];
                function upload() {
                    wx.uploadImage({
                        localId: images.localId[i],
                        success: function(res) {
                            i++;
  		            var media_id = res.serverId; /*返回图片的服务器端ID,serverId 即 media_id*/                                                                    that.siblings('img.preview').attr('src', images.localId[0]);
			    that.siblings("input[name='media_id']").val(media_id);//对隐藏域赋值传到后台处理
                            images.serverId.push(res.serverId);
                            if (i < length) {//现在只能单张
                                upload();
                            }
                        },
                        fail: function(res) {
                            alert(JSON.stringify(res));
                        }
                    });
                }
                upload();
            }
        });
    });
});
</script>

后台

        /*
	 * 获取media_id
	 */
        public function add(){
		if(IS_POST){
		    $serverId = I('post.media_id');
		    if(!empty($serverId)){
		        $data['imgpath'] = $this->doWechatPic( $serverId );
		    }
	}
	
	/*
	 * 从微信服务器获取图片流
	 */
	public function doWechatPic($serverId){//media_id=jlJs_iQIOA-TKLuhk4nCdPEdXnJ6paIeToO8vr-WUGvz05-6i5n498EzI232xSxn
               $media_id = $serverId;//提交过来的serverId即$media_id	
	        $access_token = $this->access_token;
 	        $pic_url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";
 	        $filebody = file_get_contents($pic_url);//通过接口获取图片流
                $filename = uniqid().'.jpg';            //定义图片名字及格式
	        return $this->saveFile($filename, $filebody);
	}
	
	/*
	 * 定义文件路径,写入图片流
	 */
	public function saveFile($filename, $filecontent){
	    $upload_dir = "./image/".date("Ymd");//保存路径,以时间作目录分层
            $mkpath = $upload_dir;        
	    if(!is_dir($mkpath)){
	        if(!mkdir($mkpath)){
	            die('no mkdir power');
	        }
	        if(!chmod($mkpath,0755)){//若服务器在阿里云上不建议使用0644
	            die('no chmod power');
	        }
	    }	    
	    $savepath = $upload_dir.'/'.$filename;	    
	    if(file_put_contents($savepath, $filecontent)){//写入图片流生成图片
	        return $upload."/".$filename;//返回图片路径
	    }else{
	        die('save failed');
	    }
	    
	}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值