Codeigniter+flash实现Avatar头像上传的程序
头像上传功能我们用到最多的就简单的flash+php来实现上传前剪切图片然后达到我们想要的效果了,下面我来给各位整理几个基于ci整合Avatar头像上传功能,希望例子能帮助到各位,然后在控制器中调用即可:实现方法,代码如下:
//重新设置session(防止新传头像无法显示) $this->session->set_userdata('user_info',$user_info); //项目决对路径 $base_path = rtrim(str_replace('\\','/', FCPATH),'/'); require APPPATH.'libraries/avatar.class.php'; $au = new avatar($base_path.'/uploads/user/'.$user_info['mid'].'/',$base_path.'/uploads/user/temp/','/uploads/user/','/faceapi/'); if(!$user_info['face']){ $uid = 'uface_'.$user_info['mid']; }else{ $uid = $user_info['face']; } $this->data['urlAvatarBig'] = $user_info['face'] ? $au->getAvatarUrl($uid,'big') : (($this->user_info['sex']==0 )? static_url().'/uploads/user/dfgirl.png' : static_url().'/uploads/user/dfboy.png' ); $this->data['urlCameraFlash'] = $au->renderHtml($uid); $this->data['uid'] = $uid;//头像标示 $this->load->view('center/member/edit_face',$this->data);
视图中的调用方法,代码如下:
<div style="float:left;width:455px;height:253px;overflow:hidden;margin-left:10px;"> <?php echo $urlCameraFlash ?> </div> <script type="text/javascript"> function updateavatar(){ $('#userface').attr('src','/uploads/user/<?php echo $user_info['mid'] . '/' . $uid ?>_big.jpg?aid='+Math.random()); } </script>
下面再来补充一下avatar.class.php了,代码如下:
<?php class avatar { public $savePath; public $tempPath; public $viewPath; public $urlPath; public $mid; public function __construct($savePath, $tempPath, $viewPath, $urlPath, $mid) { $this->savePath = $savePath; $this->tempPath = $tempPath; $this->viewPath = 'http://' . $_SERVER['HTTP_HOST'] . $viewPath; $this->urlPath = 'http://' . $_SERVER['HTTP_HOST'] . $urlPath; $this->mid = $mid; } // 第一步:上传原始图片文件 private function uploadAvatar($uid) { // 检查上传文件的有效性 if (emptyempty($_FILES['Filedata'])) { return -3; // No photograph be upload! } // 本地临时存储位置 $tmpPath = $this->tempPath . "{$uid}.jpg"; // 如果临时存储的文件夹不存在,先创建它 $dir = dirname($tmpPath); if (!file_exists($dir)) { @mkdir($dir, 0777, true); } // 如果同名的临时文件已经存在,先删除它 if (file_exists($tmpPath)) { @unlink($tmpPath); } // 把上传的图片文件保存到预定位置 if (@copy($_FILES['Filedata']['tmp_name'], $tmpPath) || @move_uploaded_file($_FILES['Filedata']['tmp_name'], $tmpPath)) { @unlink($_FILES['Filedata']['tmp_name']); list($width, $height, $type, $attr) = getimagesize($tmpPath); if ($width < 10 || $height < 10 || $width > 3000 || $height > 3000 || $type == 4) { @unlink($tmpPath); return -2; // Invalid photograph! } } else { @unlink($_FILES['Filedata']['tmp_name']); return -4; // Can not write to the data/tmp folder! } // 用于访问临时图片文件的 url $tmpUrl = $this->viewPath . "temp/{$uid}.jpg"; return $tmpUrl; } private 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; } // 第二步:上传分割后的三个图片数据流 private function rectAvatar($uid) { // 从 $_POST 中提取出三个图片数据流 $bigavatar = $this->flashdata_decode($_POST['avatar1']); $middleavatar = $this->flashdata_decode($_POST['avatar2']); if (!$bigavatar || !$middleavatar) { return '<root><message type="error" value="-2" /></root>'; } //不存在目录,则创建 if (!file_exists($this->savePath)) { @mkdir($this->savePath, 0777, true); } // 保存为图片文件 $bigavatarfile = $this->savePath . "{$uid}_big.jpg"; $middleavatarfile = $this->savePath . "{$uid}_middle.jpg"; $success = 1; $fp = @fopen($bigavatarfile, 'wb'); @fwrite($fp, $bigavatar); @fclose($fp); $fp = @fopen($middleavatarfile, 'wb'); @fwrite($fp, $middleavatar); @fclose($fp); // 验证图片文件的正确性 $biginfo = @getimagesize($bigavatarfile); $middleinfo = @getimagesize($middleavatarfile); if (!$biginfo || !$middleinfo || $biginfo[2] == 4 || $middleinfo[2] == 4) { file_exists($bigavatarfile) && unlink($bigavatarfile); file_exists($middleavatarfile) && unlink($middleavatarfile); $success = 0; } // 删除临时存储的图片 $tmpPath = $this->tempPath . "{$uid}.jpg"; @unlink($tmpPath); //临时保存头像 $con = mysql_connect('localhost', 'root', 'root'); mysql_select_db('zenyue'); mysql_query("set names utf8"); $sql = "update zen_user set `face`='" . $uid . "' where mid='" . $this->mid . "'"; mysql_query($sql); return '<?xml version="1.0" ?><root><face success="' . $success . '"/></root>'; } // 从客户端访问头像图片的 url public function getAvatarUrl($uid, $size = 'middle') { $ci = & get_instance(); $user_info = $ci->session->userdata('user_info'); return $this->viewPath . "{$user_info['mid']}/{$uid}_{$size}.jpg"; } // 处理 HTTP Request // 返回值:如果是可识别的 request,处理后返回 true;否则返回 false。 public function processRequest() { // 从 input 参数里拆解出自定义参数 $arr = array(); parse_str($_GET['input'], $arr); $uid = $arr['uid']; if ($_GET['a'] == 'uploadavatar') { // 第一步:上传原始图片文件 echo $this->uploadAvatar($uid); return true; } else if ($_GET['a'] == 'rectavatar') { // 第二步:上传分割后的三个图片数据流 echo $this->rectAvatar($uid); return true; } return false; } // 编辑页面中包含 camera.swf 的 HTML 代码 public function renderHtml($uid) { // 把需要回传的自定义参数都组装在 input 里 $ci = & get_instance(); $user_info = $ci->session->userdata('user_info'); $input = urlencode("uid={$uid}&FSESSIONID=" . session_id() . '&mid=' . $user_info['mid']); $baseUrl = '/public/zen/js/avatar/'; $uc_api = urlencode($this->urlPath . 'avatar.php'); $urlCameraFlash = "{$baseUrl}camera.swf?m=user&inajax=1&appid=1&ucapi={$uc_api}&input={$input}&uploadSize=2048"; $urlCameraFlash = '<script src="' . $baseUrl . 'common.js?B6k" type="text/javascript"></script><script type="text/javascript">document.write(AC_FL_RunContent("width","455","height","253","scale","exactfit","src","' . $urlCameraFlash . '","id","mycamera","name","mycamera","quality","high","bgcolor","#ffffff","wmode","transparent","menu","false","swLiveConnect","true","allowScriptAccess","always"));</script>'; return $urlCameraFlash; } } ?>
本文地址:http://www.phprm.com/scxz/fs4812.html
转载随意,但请附上文章地址:-)