首页 > 语言 > PHP > 正文

Codeigniter+flash实现Avatar头像上传的程序

2024-09-04 11:45:00
字体:
来源:转载
供稿:网友

头像上传功能我们用到最多的就简单的flash+php来实现上传前剪切图片然后达到我们想要的效果了,下面我来给各位整理几个基于ci整合Avatar头像上传功能,希望例子能帮助到各位,然后在控制器中调用即可:实现方法,代码如下:

  1. //重新设置session(防止新传头像无法显示) 
  2. $this->session->set_userdata('user_info',$user_info); 
  3.  
  4. //项目决对路径 
  5. $base_path = rtrim(str_replace('\\','/', FCPATH),'/'); 
  6.  
  7. require APPPATH.'libraries/avatar.class.php'
  8.  
  9. $au = new avatar($base_path.'/uploads/user/'.$user_info['mid'].'/',$base_path.'/uploads/user/temp/','/uploads/user/','/faceapi/'); 
  10. if(!$user_info['face']){ 
  11.     $uid = 'uface_'.$user_info['mid']; 
  12. }else
  13.     $uid = $user_info['face']; 
  14. }//开源代码Vevb.com 
  15.  
  16. $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' ); 
  17. $this->data['urlCameraFlash'] = $au->renderHtml($uid); 
  18. $this->data['uid'] = $uid;//头像标示 
  19. $this->load->view('center/member/edit_face',$this->data); 

视图中的调用方法,代码如下:

  1. <div style="float:left;width:455px;height:253px;overflow:hidden;margin-left:10px;"><?php echo $urlCameraFlash ?></div> 
  2.  
  3. <script type="text/javascript"
  4. function updateavatar(){ 
  5.     $('#userface').attr('src','/uploads/user/<?php echo $user_info['mid'].'/'.$uid?>_big.jpg?aid='+Math.random()); 
  6. </script> 

下面再来补充一下avatar.class.php了,代码如下:

  1. <?php 
  2. class avatar{ 
  3.  public $savePath
  4.  public $tempPath
  5.  public $viewPath
  6.  public $urlPath
  7.  public $mid
  8.  public function __construct($savePath,$tempPath,$viewPath,$urlPath,$mid){ 
  9.   $this->savePath=$savePath
  10.   $this->tempPath=$tempPath
  11.   $this->viewPath='http://'.$_SERVER['HTTP_HOST'].$viewPath
  12.   $this->urlPath='http://'.$_SERVER['HTTP_HOST'].$urlPath
  13.   $this->mid = $mid
  14.  } 
  15.  // 第一步:上传原始图片文件 
  16.  private function uploadAvatar($uid){ 
  17.   // 检查上传文件的有效性 
  18.   if(emptyempty($_FILES['Filedata'])){ 
  19.    return -3; // No photograph be upload! 
  20.   } 
  21.   // 本地临时存储位置 
  22.   $tmpPath = $this->tempPath."{$uid}.jpg"
  23.   // 如果临时存储的文件夹不存在,先创建它 
  24.   $dir=dirname($tmpPath); 
  25.   if(!file_exists($dir)){ 
  26.    @mkdir($dir,0777, true ); 
  27.   } 
  28.   // 如果同名的临时文件已经存在,先删除它 
  29.   if(file_exists($tmpPath)){ 
  30.    @unlink($tmpPath); 
  31.   } 
  32.   // 把上传的图片文件保存到预定位置 
  33.   if ( @copy($_FILES['Filedata']['tmp_name'], $tmpPath) || @move_uploaded_file($_FILES['Filedata']['tmp_name'], $tmpPath)) { 
  34.    @unlink($_FILES['Filedata']['tmp_name']); 
  35.    list($width$height$type$attr) = getimagesize($tmpPath); 
  36.    if ( $width < 10 || $height < 10 || $width > 3000 || $height > 3000 || $type == 4 ) { 
  37.     @unlink($tmpPath); 
  38.     return -2; // Invalid photograph! 
  39.    } 
  40.   } else { 
  41.    @unlink($_FILES['Filedata']['tmp_name']); 
  42.    return -4; // Can not write to the data/tmp folder! 
  43.   } 
  44.   // 用于访问临时图片文件的 url 
  45.   $tmpUrl =$this->viewPath."temp/{$uid}.jpg"
  46.   return $tmpUrl
  47.  } 
  48.  private function flashdata_decode($s) { 
  49.   $r = ''
  50.   $l = strlen($s); 
  51.   for($i=0; $i<$l$i=$i+2) { 
  52.    $k1 = ord($s[$i]) - 48; 
  53.    $k1 -= $k1 > 9 ? 7 : 0; 
  54.    $k2 = ord($s[$i+1]) - 48; 
  55.    $k2 -= $k2 > 9 ? 7 : 0; 
  56.    $r .= chr($k1 << 4 | $k2); 
  57.   } 
  58.   return $r
  59.  } 
  60.  // 第二步:上传分割后的三个图片数据流 
  61.  private function rectAvatar( $uid ){ 
  62.   // 从 $_POST 中提取出三个图片数据流 
  63.   $bigavatar    = $this->flashdata_decode( $_POST['avatar1'] ); 
  64.   $middleavatar = $this->flashdata_decode( $_POST['avatar2'] ); 
  65.   if ( !$bigavatar || !$middleavatar) { 
  66.    return '<root><message type="error" value="-2" /></root>'
  67.   } 
  68.    
  69.   //不存在目录,则创建 
  70.   if(!file_exists($this->savePath)){ 
  71.    @mkdir($this->savePath,0777, true ); 
  72.   } 
  73.   // 保存为图片文件 
  74.   $bigavatarfile    = $this->savePath."{$uid}_big.jpg"
  75.   $middleavatarfile = $this->savePath."{$uid}_middle.jpg"
  76.   $success = 1; 
  77.   $fp = @fopen($bigavatarfile'wb'); 
  78.   @fwrite($fp$bigavatar); 
  79.   @fclose($fp); 
  80.   $fp = @fopen($middleavatarfile'wb'); 
  81.   @fwrite($fp$middleavatar); 
  82.   @fclose($fp); 
  83.   // 验证图片文件的正确性 
  84.   $biginfo    = @getimagesize($bigavatarfile); 
  85.   $middleinfo = @getimagesize($middleavatarfile); 
  86.   if ( !$biginfo || !$middleinfo || $biginfo[2] == 4 || $middleinfo[2] == 4 ) { 
  87.    file_exists($bigavatarfile) && unlink($bigavatarfile); 
  88.    file_exists($middleavatarfile) && unlink($middleavatarfile); 
  89.    $success = 0; 
  90.   } 
  91.   // 删除临时存储的图片 
  92.   $tmpPath = $this->tempPath."{$uid}.jpg"
  93.   @unlink($tmpPath); 
  94.   //临时保存头像 
  95.   $con=mysql_connect('localhost','root','root'); 
  96.   mysql_select_db('zenyue'); 
  97.   mysql_query("set names utf8"); 
  98.   $sql="update zen_user set `face`='".$uid."' where mid='".$this->mid."'"
  99.   mysql_query($sql); 
  100.   return '<?xml version="1.0" ?><root><face success="' . $success . '"/></root>'
  101.  } 
  102.  // 从客户端访问头像图片的 url 
  103.  public function getAvatarUrl( $uid$size='middle' ){ 
  104.   $ci = &get_instance(); 
  105.   $user_info = $ci->session->userdata('user_info'); 
  106.   return $this->viewPath."{$user_info['mid']}/{$uid}_{$size}.jpg"
  107.  } 
  108.  // 处理 HTTP Request 
  109.  // 返回值:如果是可识别的 request,处理后返回 true;否则返回 false。 
  110.  public function processRequest(){ 
  111.   // 从 input 参数里拆解出自定义参数 
  112.   $arr = array(); 
  113.   parse_str$_GET['input'], $arr ); 
  114.   $uid = $arr['uid']; 
  115.   if ( $_GET['a'] == 'uploadavatar') { 
  116.    // 第一步:上传原始图片文件 
  117.    echo $this->uploadAvatar( $uid ); 
  118.    return true; 
  119.   } else if ( $_GET['a'] == 'rectavatar') { 
  120.    // 第二步:上传分割后的三个图片数据流 
  121.    echo $this->rectAvatar( $uid ); 
  122.    return true; 
  123.   } 
  124.   return false; 
  125.  } 
  126.  // 编辑页面中包含 camera.swf 的 HTML 代码 
  127.  public function renderHtml( $uid ){ 
  128.   // 把需要回传的自定义参数都组装在 input 里 
  129.   $ci = &get_instance(); 
  130.   $user_info = $ci->session->userdata('user_info'); 
  131.   $input = urlencode("uid={$uid}&FSESSIONID=".session_id().'&mid='.$user_info['mid']); 
  132.   $baseUrl = '/public/zen/js/avatar/'
  133.   $uc_api = urlencode( $this->urlPath.'avatar.php'); 
  134.   $urlCameraFlash = "{$baseUrl}camera.swf?m=user&inajax=1&appid=1&ucapi={$uc_api}&input={$input}&uploadSize=2048"
  135.   $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>'
  136.   return $urlCameraFlash
  137.  } 
  138. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表