博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ucenter用户中心头像修改,不使用自带方法,不使用flash 转
阅读量:6858 次
发布时间:2019-06-26

本文共 2110 字,大约阅读时间需要 7 分钟。

 项目中用户中心用的是ucenter,需要直接把开放平台的用户图像保存到本系统,uc自带的uc_avatar方法无法满足需求,通过用 SocketSniff对该flash上传图片抓包分析,该flash先把用户选择的图片上传到ucenter根目录的data/tmp目录下,然后返回 地址,用户选择区域后,生成三张图片的16进制代码,post给ucenter,就完成了用户的图像保存。知道了原理,程序就好写了。

 

在项目目录中的uc_client文件夹中的client.php增加一个uc_avatar_code函数,作用是返回input

1 function uc_avatar_code($uid, $type = 'virtual', $returnhtml = 1){
2     $uid = intval($uid);
3     $uc_input = uc_api_input("uid=$uid");
4     $input =str_replace('25', '', $uc_input);
5     return $input;
6 }

项目是用thinkPHP开发,下面是主要代码,其中checkTitle为中 的方法,由于整个过程可能会比较耗时,修改用户图像放到后端消息队列处理,先把用户的在开放平台的用户图像,保存在Public/tmp/文件夹下,名 为$uid的文件,没有扩展名,直接下载的,不处理是不知道扩展名的。保存图像只需要请求saveOpenFace方法,加上用户id,即可保存用户图 像。

01 /*
02      * 保存开放平台用户图像到uc
03      *
04      * @uid : 用户id
05      * */
06     public function saveOpenFace(){
07         $uid = intval($_GET['id']);
08         $path = 'Public/tmp/';
09         $local = $path.$uid;       
10         $suffix = checkTitle($local);
11         $file = $local.'.'.$suffix;
12         rename($local,$file);
13         import("ORG.Util.Image");
14         import("ORG.Net.Snoopy");
15         $Image = new Image();
16         $Snoopy = new Snoopy();
17         $imgB = $path.'b_'.$uid.'.'.$suffix;
18         $imgM = $path.'m_'.$uid.'.'.$suffix;
19         $imgS = $path.'s_'.$uid.'.'.$suffix;
20         $Image->img2thumb($file,$imgB,200,200,1);
21         $Image->img2thumb($file,$imgM,120,120,1);
22         $Image->img2thumb($file,$imgS,48,48,1);
23         $input = uc_avatar_code($uid);     
24         $formvars["avatar1"] = $this->imgTo16Code($imgB);
25         $formvars["avatar2"] = $this->imgTo16Code($imgM);
26         $formvars["avatar3"] = $this->imgTo16Code($imgS);
27         $action = C('UC_HOST').'/index.php?m=user&inajax=1&a=rectavatar&appid=1&input='.$input.'&avatartype=virtual';
28         $Snoopy->submit($action,$formvars);
29         unlink($file);
30         unlink($imgB);
31         unlink($imgM);
32         unlink($imgS);
33         echo true; 
34     }
35     /*
36      * 把图片转换成16进制
37      * @file : 文件路径
38      * */
39     public function imgTo16Code($filename){
40         $file = file_get_contents($filename);
41         $code = strtoupper(bin2hex($file));
42         return $code;
43     }

 PS:由于用的消息队列,后端是程序提交,POST提交用的Snoopy,伪造HTTP_USER_AGENT老是不成功,而无法提交,暂时把验 证注释了,有时间在看看,注释的文件为ucenter/model/base.php84行即//exit('Access denied for agent changed');

转载于:https://www.cnblogs.com/murongshuai/p/4626080.html

你可能感兴趣的文章
Java 根据当前时间获取明天、当前周的周五、当前月的最后一天
查看>>
3.View绘制分析笔记之onLayout
查看>>
linux语言设置i18n(转)
查看>>
双链表插入 删除详解
查看>>
迄今为止计算机视觉领域超有实力的研究人物主页
查看>>
Java中值类型和引用类型的区别
查看>>
php 页面间传递数据
查看>>
[Node.js] Initialize a LoopBack Node.js Project through the CLI
查看>>
nginx补丁格式说明(CVE-2016-4450为例)
查看>>
C#编程(八十一)---------- 捕获异常
查看>>
Kinect2.0点云数据获取
查看>>
Omi新成员omi-router正式发布
查看>>
CentOS7.2 安装Tomcat
查看>>
二进制数组
查看>>
how tomcat works 总结
查看>>
Java+FlashWavRecorder实现网页录音并上传
查看>>
月球美容计划之最小生成树(MST)
查看>>
块状元素与内联元素的差别
查看>>
【SSH 基础】SSH框架--struts深入具体解释(一)
查看>>
Redis源代码分析(十三)--- redis-benchmark性能測试
查看>>