discuz的手機版是沒有自帶頭像上傳的功能,而pc版是用flash實現的上傳,不能直接用於手機版。php
首先先分析一下pc版的頭像修改原理,經過抓包,提取了保存頭像的url:html
同時post 3種尺寸的頭像,詳細參數以下:html5
路徑知道了,就開始看代碼,構造請求jquery
url的生成算法:ajax
<!--{eval $uc_avatarpost = UC_API.'/index.php?m=user&inajax=1&a=rectavatar&appid='.UC_APPID.'&input='.uc_api_input("uid=$_G[uid]").'&agent='.md5($_SERVER['HTTP_USER_AGENT']).'&avatartype=virtual';}-->算法
頭像壓縮算法:
api
從抓包的結果上看是16進制的編碼,但從服務端代碼(uc_server/control/user.php)你會發現是加密過的16進制,服務端解密算法以下app
function flashdata_decode($s) { $r = ''; $l = strlen($s); for($i=0; $i<$l; $i=$i+2) { $k1 = ord($s[$i]) - 48; $k1 -= $k1 > 9 ? 7 : 0; $k2 = ord($s[$i+1]) - 48; $k2 -= $k2 > 9 ? 7 : 0; $r .= chr($k1 << 4 | $k2); } return $r; }
但,咱們須要加密算法,pc版是經過flash處理的,因此咱們看不到源代碼,沒法仿製,只能經過解密算法去推測加密算法。post
簡單的混淆和位運算,我沒有去測試,而是修改了user.php,哪位大神有現成的加密算法不妨分享一下+_+~
前端上傳組件我用的是 jquery.html5_upload.js,圖片壓縮還在作,有須要的朋友我作完後能夠把源代碼分享出來