生活随笔
收集整理的這篇文章主要介紹了
ucenter用户中心头像修改,不使用自带方法,不使用flash 转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?項目中用戶中心用的是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); |
項目是用thinkPHP開發,下面是主要代碼,其中checkTitle為php判斷文件類型中 的方法,由于整個過程可能會比較耗時,修改用戶圖像放到后端消息隊列處理,先把用戶的在開放平臺的用戶圖像,保存在Public/tmp/文件夾下,名 為$uid的文件,沒有擴展名,直接下載的,不處理是不知道擴展名的。保存圖像只需要請求saveOpenFace方法,加上用戶id,即可保存用戶圖 像。
view source print ?
| 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); |
| 39 | ????public function imgTo16Code($filename){ |
| 40 | ????????$file = file_get_contents($filename); |
| 41 | ????????$code = strtoupper(bin2hex($file)); |
?PS:由于用的消息隊列,后端是程序提交,POST提交用的Snoopy,偽造HTTP_USER_AGENT老是不成功,而無法提交,暫時把驗 證注釋了,有時間在看看,注釋的文件為ucenter/model/base.php84行即//exit('Access denied for agent changed');
轉載于:https://www.cnblogs.com/murongshuai/p/4626080.html
總結
以上是生活随笔為你收集整理的ucenter用户中心头像修改,不使用自带方法,不使用flash 转的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。