php版Ali云OSS图片上传类详解,PHP达成录像文件上传完整实例

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<title>PHP文件上传</title>
<style type="text/css" rel="stylesheet" />
.border{
 background-color:#000000
}
.box{
 background-color:#f8f8f9;
}
.text{ 
 color:#000000;
 font-family: "宋体";
 font-size: 12px;
 font-weight:bold
}
input, select{
 font-size: 12px;
}
body{
  margin: 0;
}
</style>
<body>
 <!-- 文件上传表单,enctype属性是必须的 -->
 <form name="form" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'] ; ?>">
 <input type="hidden" name="action" value="upload">
 <table border="0" cellspacing="1" cellpadding="0" align="center" class="border">
  <tr> 
  <td>
   <?php
   if($message_true != '')
    func_message($message_true, true);
   if($message_false != '')
    func_message($message_false, false);
   ?>
   <table width="100%" border="0" cellspacing="5" cellpadding="2" align="center" class="box">
   <?php 
    for($nb = 1 ; $nb <= MUILTI_FILE_UPLOAD ; $nb ++ ){ 
   ?>
   <tr class="text"> 
    <td>上传文件: <?php echo $nb; ?></td> 
    <td><input type="file" name="file_<?php echo $nb; ?>"></td>
    <td>新文件名(包括扩展名):<?php echo $nb; ?> </td>
    <td><input type="text" name="file_name_<?php echo $nb; ?>"></td>
   </tr>
   <?php } ?>
   <tr> 
    <td colspan="2" align="right" class="text">
    上传目的地址:<?php echo FILE_UPLOAD_DIR ;?>
     <select name="file">    
     <option value=""></option>
     <?php 
     $repertoire = opendir(FILE_UPLOAD_DIR); 
     while( $file = readdir($repertoire) ) { 
      $file = str_replace('.','',$file);
      if( is_dir($file)) { 
     ?> 
     <option value="<?php echo $file; ?>"> <?php echo $file; ?>/</option>
     <?php 
       } 
     } 
     closedir($repertoire); 
     ?>
    </select>
    </td>
    <td colspan="2" align="right"><input type="submit" value="可同时上传<?php echo $nb-1; ?> 个文件 "></td>
   </tr>
   </table>
  </td>
  </tr>
 </table>
 </form>  
</body>
</html>
/**
 * 上传一个文件
 * @access public
 * @param mixed $name 数据
 * @param string $value 数据表名
 * @return string
 */
private function save($file) {
  $filename = $file['savepath'].$file['savename'];
  if(!$this->uploadReplace && $this->doesObjectExist($filename)) {
    // 不覆盖同名文件
    $this->error  =  '文件已经存在!'.$filename;
    return false;
  }
  // 如果是图像文件 检测文件格式
  if( in_array(strtolower($file['extension']),array('gif','jpg','jpeg','bmp','png','swf'))) {
    $info  = getimagesize($file['tmp_name']);
    if(false === $info || ('gif' == strtolower($file['extension']) && empty($info['bits']))){
      $this->error = '非法图像文件';
      return false;
    }
  }
  if(!$this->putObject($file['tmp_name'], $this->autoCharset($filename,'utf-8','gbk'))) {
    $this->error = '文件上传保存错误!';
    return false;
  }
  if($this->thumb && in_array(strtolower($file['extension']),array('gif','jpg','jpeg','bmp','png'))) {
    $image = getimagesize(C('OSS_IMG_URL').'/'.$filename);
    if(false !== $image) {
      //是图像文件生成缩略图
      $thumbWidth   =  explode(',',$this->thumbMaxWidth);
      $thumbHeight  =  explode(',',$this->thumbMaxHeight);
      $thumbPrefix  =  explode(',',$this->thumbPrefix);
      $thumbSuffix  =  explode(',',$this->thumbSuffix);
      $thumbFile   =  explode(',',$this->thumbFile);
      $thumbPath   =  $this->thumbPath?$this->thumbPath:dirname($filename).'/';
      $thumbExt    =  $this->thumbExt ? $this->thumbExt : $file['extension']; //自定义缩略图扩展名
      // 生成图像缩略图
      import($this->imageClassPath);
      for($i=0,$len=count($thumbWidth); $i<$len; $i++) {
        if(!empty($thumbFile[$i])) {
          $thumbname =  $thumbFile[$i];
        }else{
          $prefix   =  isset($thumbPrefix[$i])?$thumbPrefix[$i]:$thumbPrefix[0];
          $suffix   =  isset($thumbSuffix[$i])?$thumbSuffix[$i]:$thumbSuffix[0];
          $thumbname =  $prefix.basename($filename,'.'.$file['extension']).$suffix;
        }
        $this->thumb(C('OSS_IMG_URL').'/'.$filename,$thumbPath.$thumbname.'.'.$thumbExt,'',$thumbWidth[$i],$thumbHeight[$i],true);
      }
      if($this->thumbRemoveOrigin) {
        // 生成缩略图之后删除原图
        $this->deleteObject($filename);
      }
    }
  }
  if($this->zipImags) {
    // TODO 对图片压缩包在线解压
  }
  return true;
}
/**
 * 生成缩略图
 * @static
 * @access public
 * @param string $image 原图
 * @param string $type 图像格式
 * @param string $thumbname 缩略图文件名
 * @param string $maxWidth 宽度
 * @param string $maxHeight 高度
 * @param string $position 缩略图保存目录
 * @param boolean $interlace 启用隔行扫描
 * @return void
 */
public function thumb($image, $thumbname, $type='', $maxWidth=200, $maxHeight=50, $interlace=true) {
  // 获取原图信息
  $info = Image::getImageInfo($image);
  if ($info !== false) {
    $srcWidth = $info['width'];
    $srcHeight = $info['height'];
    $type = empty($type) ? $info['type'] : $type;
    $type = strtolower($type);
    $interlace = $interlace ? 1 : 0;
    unset($info);
    $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例
    if ($scale >= 1) {
      // 超过原图大小不再缩略
      $width = $srcWidth;
      $height = $srcHeight;
    } else {
      // 缩略图尺寸
      $width = (int) ($srcWidth * $scale);
      $height = (int) ($srcHeight * $scale);
    }
    // 载入原图
    $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type);
    if(!function_exists($createFun)) {
      return false;
    }
    $srcImg = $createFun($image);
    //创建缩略图
    if ($type != 'gif' && function_exists('imagecreatetruecolor'))
      $thumbImg = imagecreatetruecolor($width, $height);
    else
      $thumbImg = imagecreate($width, $height);
     //png和gif的透明处理 by luofei614
    if('png'==$type){
      imagealphablending($thumbImg, false);//取消默认的混色模式(为解决阴影为绿色的问题)
      imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息(为解决阴影为绿色的问题)
    }elseif('gif'==$type){
      $trnprt_indx = imagecolortransparent($srcImg);
       if ($trnprt_indx >= 0) {
          //its transparent
          $trnprt_color = imagecolorsforindex($srcImg , $trnprt_indx);
          $trnprt_indx = imagecolorallocate($thumbImg, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
          imagefill($thumbImg, 0, 0, $trnprt_indx);
          imagecolortransparent($thumbImg, $trnprt_indx);
     }
    }
    // 复制图片
    if (function_exists("ImageCopyResampled"))
      imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
    else
      imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
    // 对jpeg图形设置隔行扫描
    if ('jpg' == $type || 'jpeg' == $type)
      imageinterlace($thumbImg, $interlace);
    imagePNG($thumbImg,'Uploads/file.png'); // 中转站
    // 生成图片
    $this->putObject('Uploads/file.png',$thumbname);
    imagedestroy($thumbImg);
    imagedestroy($srcImg);
    return $thumbname;
  }
  return false;
}
<?php
class UploadFile{
  var $inputName;         //控件名
  var $allowType = array(
        'image/gif','image/jpg','image/jpeg','image/png','image/x-png','image/pjpeg'
  );                //上传类型
  var $allowSize = 2097152;  //限制大小
  var $saveDir = UPLOAD;   //保存目录
  var $isRename = true;        //是否重命名,默认为true
  var $errID = 0;           //错误代码,默认为0
  var $errMsg = "";          //错误信息
  var $savePath = "";         //保存路径

  function __construct($inputName,$allowType="",$allowSize="",$saveDir="",$isRename=true){
    if(empty($inputName)){
      $this->chk_err(-1);    //无传入控件名
    }else{
      $this->inputName = $inputName;
    }

    if(!empty($allowType)) $this->allowType = $allowType;
    if(!empty($allowSize)) $this->allowSize = $allowSize;
    if(!empty($saveDir)) $this->saveDir = $saveDir;
    if(!empty($isRename)) $this->isRename = $isRename;
  }

  function is_uploaded(){
    if(empty($_FILES[$this->inputName]['name'])){
      $this->chk_err(4);  //没有文件被上传
    }else{
      if(is_uploaded_file($_FILES[$this->inputName]['tmp_name'])){
        return true;
      }else{
        $this->chk_err(-2);    //文件上传不合法
      }
    }
  }

  function chk_type(){
    if(!in_array($_FILES[$this->inputName]['type'],$this->allowType)){
      $this->chk_err(-3);     //上传的文件类型不被允许
    }else{
      return true;
    }
  }

  function chk_size(){
    if($_FILES[$this->inputName]['size'] > $this->allowSize){
      $this->chk_(-4);     //上传的文件过大
    }else{
      return true;
    }
  }

  function move_uploaded(){    //移动上传文件
    if(!$this->is_uploaded()){
      return false;
    }

    if(!$this->chk_size()){
      return false;
    }

    if(!$this->chk_type()){
      return false;
    }

    //重命名
    if($this->isRename){
      $arrTmp = pathinfo($_FILES[$this->inputName]['name']);
      $extension = strtolower($arrTmp['extension']);
      $file_newname = date("YmdHis").rand(1000,9999)."00.".$extension; //重命名新文件, 00表示为上传的为原图
    }else{
      $file_newname = $_FILES[$this->inputName]['name'];
    }

    if(!file_exists($this->saveDir)){    //判断保存目录是否存在
      mkdir($this->saveDir,0777,true);  //建立保存目录
    }

    //移动文件
    $result = move_uploaded_file($_FILES[$this->inputName]['tmp_name'],$this->saveDir."/".$file_newname);

    if($result){
      $path = $this->savePath = $this->saveDir.$file_newname;    //文件的成功保存路径
      return $path;
    }else{
      $this->chk_err($_FILES[$this->inputName]['error']);
    }

  }

  //判断出错信息
  function chk_err($errID){
    $this->errID = $errID;
    switch($this->errID){
      case -4:
        $this->errMsg = "上传的文件过大";
        break;
      case -3:
        $this->errMsg = "上传的文件类型不被允许";
        break;
      case -2:
        $this->errMsg = "文件上传不合法";
        break;
      case -1:
        $this->errMsg = "无控件名传入";
        break;
      case 1:
        $this->errMsg = '上传的文件超出了php.ini中upload_max_filesize设定的最大值';
        break;
      case 2:
        $this->errMsg = '上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值';
        break;
      case 3:
        $this->errMsg = '文件只有部分被上传';
        break;
      case 4:
        $this->errMsg = '没有文件被上传';
        break;
      default:
        break;
    }
    return false;

  }

  function get_errMsg(){
    echo $this->errMsg; //输出错误信息
  }

  /**
   +----------------------------------------------------------
   * 取得图像信息
   *
   +----------------------------------------------------------
   * @static
   * @access public
   +----------------------------------------------------------
   * @param string $image 图像文件名
   +----------------------------------------------------------
   * @return mixed
   +----------------------------------------------------------
   */
  function getImageInfo($img) {
    $imageInfo = getimagesize($img);
    if( $imageInfo!== false) {
      $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1));
      $imageSize = filesize($img);
      $info = array(
        "width"    =>$imageInfo[0],
        "height"  =>$imageInfo[1],
        "type"    =>$imageType,
        "size"    =>$imageSize,
        "mime"    =>$imageInfo['mime'],
      );
      return $info;
    }else {
      return false;
    }
  }

  /**
   +----------------------------------------------------------
   * 生成缩略图
   +----------------------------------------------------------
   * @static
   * @access public
   +----------------------------------------------------------
   * @param string $image 原图
   * @param string $type 图像格式
   * @param string $thumbname 缩略图文件名
   * @param string $maxWidth 宽度
   * @param string $maxHeight 高度
   * @param string $position 缩略图保存目录
   * @param boolean $interlace 启用隔行扫描
   * @param boolean $is_save 是否保留原图
   +----------------------------------------------------------
   * @return void
   +----------------------------------------------------------
   */

  function thumb($image,$is_save=true,$suofang=0,$type='',$maxWidth=500,$maxHeight=500,$interlace=true){
    // 获取原图信息
    $info = $this->getImageInfo($image);
     if($info !== false) {
      $srcWidth = $info['width'];
      $srcHeight = $info['height'];
      $type = empty($type)?$info['type']:$type;
      $type = strtolower($type);
      $interlace = $interlace? 1:0;
      unset($info);
      if ($suofang==1) {
        $width = $srcWidth;
        $height = $srcHeight;
      } else {
        $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例
        if($scale>=1) {
          // 超过原图大小不再缩略
          $width  = $srcWidth;
          $height = $srcHeight;
        }else{
          // 缩略图尺寸
          $width = (int)($srcWidth*$scale);  //147
          $height = (int)($srcHeight*$scale);  //199
        }
      }
      // 载入原图
      $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type);
      $srcImg   = $createFun($image);

      //创建缩略图
      if($type!='gif' && function_exists('imagecreatetruecolor'))
        $thumbImg = imagecreatetruecolor($width, $height);
      else
        $thumbImg = imagecreate($width, $height);

      // 复制图片
      if(function_exists("ImageCopyResampled"))
        imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);
      else
        imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);
      if('gif'==$type || 'png'==$type) {
        //imagealphablending($thumbImg, false);//取消默认的混色模式
        //imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息
        $background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一个绿色
        imagecolortransparent($thumbImg,$background_color); // 设置为透明色,若注释掉该行则输出绿色的图
      }
      // 对jpeg图形设置隔行扫描
      if('jpg'==$type || 'jpeg'==$type)   imageinterlace($thumbImg,$interlace);
      //$gray=ImageColorAllocate($thumbImg,255,0,0);
      //ImageString($thumbImg,2,5,5,"ThinkPHP",$gray);
      // 生成图片
      $imageFun = 'image'.($type=='jpg'?'jpeg':$type); 
      $length = strlen("00.".$type) * (-1);
      $_type = substr($image,-4);
      $length = ($type != $_type ? $length+1 : $length);
      //裁剪
      if ($suofang==1) {

        $thumbname01 = substr_replace($image,"01.".$type,$length);    //大头像
        $thumbname02 = substr_replace($image,"02.".$type,$length);    //小头像
        $imageFun($thumbImg,$thumbname01,100);
        $imageFun($thumbImg,$thumbname02,100);

        $thumbImg01 = imagecreatetruecolor(190,195);
        imagecopyresampled($thumbImg01,$thumbImg,0,0,$_POST['x'],$_POST['y'],190,195,$_POST['w'],$_POST['h']);

        $thumbImg02 = imagecreatetruecolor(48,48);
        imagecopyresampled($thumbImg02,$thumbImg,0,0,$_POST['x'],$_POST['y'],48,48,$_POST['w'],$_POST['h']);

        $imageFun($thumbImg01,$thumbname01,100);
        $imageFun($thumbImg02,$thumbname02,100);
//        unlink($image);
        imagedestroy($thumbImg01);
        imagedestroy($thumbImg02);
        imagedestroy($thumbImg);
        imagedestroy($srcImg);

        return array('big' => $thumbname01 , 'small' => $thumbname02);  //返回包含大小头像路径的数组
      }else{
        if($is_save == false){                      //缩略图覆盖原图,缩略图的路径还是原图路径
          $imageFun($thumbImg,$image,100);
        }else{
          $thumbname03 = substr_replace($image,"03.".$type,$length);  //缩略图与原图同时存在,
          $imageFun($thumbImg,$thumbname03,100);

          imagedestroy($thumbImg);
          imagedestroy($srcImg);
          return $thumbname03 ;          //返回缩略图的路径,字符串
        }
      }

     }
     return false;
  }
}

希望本文所述对大家的PHP程序设计有所帮助。

4.核心处理函数

您可能感兴趣的文章:

  • PHP图片上传类带图片显示
  • PHP5+UTF8多文件上传类
  • php 图片上传类代码
  • php 文件上传类代码
  • ThinkPHP使用心得分享-上传类UploadFile的使用
  • PHP实现多图片上传类实例
  • 一个经典的PHP文件上传类分享
  • php可生成缩略图的文件上传类实例
  • php判断文件上传类型及过滤不安全数据的方法
  • PHP多文件上传类实例

一、PHP处理代码如下:

本文实例讲述了php版阿里云OSS图片上传类。分享给大家供大家参考,具体如下:

本文实例为大家分享了php上传类,供大家参考,具体内容如下

<?php
//设置最多允许10个文件同时上传
define('MUILTI_FILE_UPLOAD', '10');
//设置文件大小不超过5MB
define('MAX_SIZE_FILE_UPLOAD', '500000' );
//设置上传文件的存储目录
define('FILE_UPLOAD_DIR', '/fileUploads');
//允许上传的文件扩展名
$array_extention_interdite = array( '.flv' , '.wmv' , '.rmvb' , '.php' , '.php3' , '.php4' , '.exe' , '.msi' , '.htaccess' , '.gz' );
//显示信息的公共函数
function func_message($message='', $ok=''){
 echo '<table width="100%" cellspacing="0" cellpadding="0" border="0">';
 if($ok == true)
 echo '<tr><td width="50%"> '.$message.'</td></tr>' ;
 else
 echo '<tr><td width="50%"> '.$message.'</td></tr>';
 echo '</table>';  
}
//处理表单提交
$action = (isset($_POST['action'])) ? $_POST['action'] :'' ;
$file = (isset($_POST['file'])) ? $_POST['file'] :'' ;
if($file != '')
  $file = $file.'/';
$message_true = '';
$message_false = '';
switch($action){
 case 'upload' :  
 chmod(FILE_UPLOAD_DIR,0777);  
 for($nb = 1 ; $nb <= MUILTI_FILE_UPLOAD ; $nb ++ ){   
  if( $_FILES['file_'.$nb]['size'] >= 10 ){ 
  if ($_FILES['file_'.$nb]['size'] <= MAX_SIZE_FILE_UPLOAD ){ 
   if (!in_array(ereg_replace('^[[:alnum:]]([-_.]?[[:alnum:]])*.' ,'.', $_FILES['file_'.$nb]['name'] ) , $array_extention_interdite) ){ 
           if($_POST['file_name_'.$nb] !='')
             $file_name_final = $_POST['file_name_'.$nb].$extension ;
           else
             $file_name_final = $_FILES['file_'.$nb]['name'] ;
           //修改文件名
           $file_name_final = strtr($file_name_final, 'aaaaaa', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
           $file_name_final = preg_replace('/([^.a-z0-1]+)/i', '_', $file_name_final ); 

           $_FILES['file_'.$nb]['name'] = $file_name_final;  
           //开始上传
           move_uploaded_file( $_FILES['file_'.$nb]['tmp_name'] , FILE_UPLOAD_DIR . $file . $file_name_final );

           $message_true .= '文件上传成功 : '.$_FILES['file_'.$nb]['name'] .'<br>'; 
        }else
           $message_false .= '文件上传失败 : '.$_FILES['file_'.$nb]['name'] .' <br>';
      }else
        $message_false .= '文件最大尺寸不能超过'.MAX_SIZE_FILE_UPLOAD/1000 . 'KB : "'.$_FILES['file_'.$nb]['tmp_name'].'" <br>';
    }
  }//end for
 break;
}
?>
/**
* 转换上传文件数组变量为正确的方式
* @access private
* @param array $files 上传的文件变量
* @return array
*/
private function dealFiles($files) {
    $fileArray = array();
    $n     = 0;
    foreach ($files as $key=>$file){
      if(is_array($file['name'])) {
        $keys    =  array_keys($file);
        $count   =  count($file['name']);
        for ($i=0; $i<$count; $i++) {
          $fileArray[$n]['key'] = $key;
          foreach ($keys as $_key){
            $fileArray[$n][$_key] = $file[$_key][$i];
          }
          $n++;
        }
      }else{
        $fileArray[$key] = $file;
      }
    }
    return $fileArray;
}
/**
* 检查上传的文件
* @access private
* @param array $file 文件信息
* @return boolean
*/
private function check($file) {
    if($file['error']!== 0) {
      //文件上传失败
      //捕获错误代码
      $this->error($file['error']);
      return false;
    }
    //文件上传成功,进行自定义规则检查
    //检查文件大小
    if(!$this->checkSize($file['size'])) {
      $this->error = '上传文件大小不符!';
      return false;
    }
    //检查文件Mime类型
    if(!$this->checkType($file['type'])) {
      $this->error = '上传文件MIME类型不允许!';
      return false;
    }
    //检查文件类型
    if(!$this->checkExt($file['extension'])) {
      $this->error ='上传文件类型不允许';
      return false;
    }
    //检查是否合法上传
    if(!$this->checkUpload($file['tmp_name'])) {
      $this->error = '非法上传文件!';
      return false;
    }
    return true;
}
// 自动转换字符集 支持数组转换
private function autoCharset($fContents, $from='gbk', $to='utf-8') {
    $from  = strtoupper($from) == 'UTF8' ? 'utf-8' : $from;
    $to   = strtoupper($to) == 'UTF8' ? 'utf-8' : $to;
    if (strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents))) {
      //如果编码相同或者非字符串标量则不转换
      return $fContents;
    }
    if (function_exists('mb_convert_encoding')) {
      return mb_convert_encoding($fContents, $to, $from);
    } elseif (function_exists('iconv')) {
      return iconv($from, $to, $fContents);
    } else {
      return $fContents;
    }
}
/**
* 检查上传的文件类型是否合法
* @access private
* @param string $type 数据
* @return boolean
*/
private function checkType($type) {
    if(!empty($this->allowTypes))
      return in_array(strtolower($type),$this->allowTypes);
    return true;
}
/**
* 检查上传的文件后缀是否合法
* @access private
* @param string $ext 后缀名
* @return boolean
*/
private function checkExt($ext) {
    if(!empty($this->allowExts))
      return in_array(strtolower($ext),$this->allowExts,true);
    return true;
}
/**
* 检查文件大小是否合法
* @access private
* @param integer $size 数据
* @return boolean
*/
private function checkSize($size) {
    return !($size > $this->maxSize) || (-1 == $this->maxSize);
}
/**
* 检查文件是否非法提交
* @access private
* @param string $filename 文件名
* @return boolean
*/
private function checkUpload($filename) {
    return is_uploaded_file($filename);
}
/**
* 取得上传文件的后缀
* @access private
* @param string $filename 文件名
* @return boolean
*/
private function getExt($filename) {
    $pathinfo = pathinfo($filename);
    return $pathinfo['extension'];
}
/**
* 取得上传文件的信息
* @access public
* @return array
*/
public function getUploadFileInfo() {
    return $this->uploadFileInfo;
}
/**
* 取得最后一次错误信息
* @access public
* @return string
*/
public function getErrorMsg() {
    return $this->error;
}

首先,对PHP来说视频也属于文件,我们利用这个道理,可以通过与上传普通文件类似的方式实现上传PHP视频文件。不同的是视频文件一般较大,上传时间长,而php配置文件也对上传文件的大小有限制。
如果需要更好地用PHP实现文件上传,还是推荐使用FTP上传方式。

希望本文所述对大家PHP程序设计有所帮助。

二、HTML代码如下:

2.基本配置与辅助函数

您可能感兴趣的文章:

  • PHP 图片文件上传实现代码
  • PHP文件上传实例详解!!!
  • 一个经典的PHP文件上传类分享
  • jQuery Ajax文件上传(php)
  • php+ajax实现图片文件上传功能实例
  • php 文件上传实例代码
  • php
    文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
  • PHP文件上传判断file是否己选择上传文件的方法
  • php多文件上传实现代码
  • php实现网页常见文件上传功能

3.主函数

本文以一个完整实例的形式实现了视频文件上传的功能。虽然是比较基础的应用,仍有一定的参考价值。分享给大家供大家参考之用。具体方法如下:

a.上传图片至服务器
澳门网上正规赌场网址,b.获取图片进行处理
c.上传处理好的图片至服务器
d.根据配置,删除或者不删除服务器的原图(OSS)

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《php文件操作总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

/**
 * 上传所有文件
 * @access public
 * @param string $savePath 上传文件保存路径
 * @return string
 */
public function upload($savePath ='') {
  //如果不指定保存文件名,则由系统默认
  if(empty($savePath)) {
    $savePath = $this->savePath;
  }
  $fileInfo  = array();
  $isUpload  = false;
  // 获取上传的文件信息
  // 对$_FILES数组信息处理
  $files  =  $this->dealFiles($_FILES);
  foreach($files as $key => $file) {
    //过滤无效的上传
    if(!empty($file['name'])) {
      //登记上传文件的扩展信息
      if(!isset($file['key']))  $file['key']  =  $key;
      $file['extension'] =  $this->getExt($file['name']);
      $file['savepath']  =  $savePath;
      $file['savename']  =  $this->getSaveName($file);
      // 自动检查附件
      if($this->autoCheck) {
        if(!$this->check($file))
          return false;
      }
      //保存上传文件
      if(!$this->save($file)) return false;
      if(function_exists($this->hashType)) {
        $fun = $this->hashType;
        $file['hash']  = $fun($this->autoCharset($file['savepath'].$file['savename'],'utf-8','gbk'));
      }
      //上传成功后保存文件信息,供其他地方调用
      unset($file['tmp_name'],$file['error']);
      $fileInfo[] = $file;
      $isUpload  = true;
    }
  }
  if($isUpload) {
    $this->uploadFileInfo = $fileInfo;
    return true;
  }else {
    $this->error = '没有选择上传文件';
    return false;
  }
}

总结:与普通上传的区别在于,它是全部通过阿里云的oss接口来处理文件保存的。普通上传是把本地文件移动到服务器上,而它则是把文件移动到阿里云服务器上。

缩略图思路:

您可能感兴趣的文章:

  • 一个经典的PHP文件上传类分享
  • ThinkPHP使用心得分享-上传类UploadFile的使用
  • PHP图片上传类带图片显示
  • php 图片上传类代码
  • php 文件上传类代码
  • php判断文件上传类型及过滤不安全数据的方法
  • PHP实现多图片上传类实例
  • PHP5+UTF8多文件上传类
  • php可生成缩略图的文件上传类实例
  • 一个非常实用的php文件上传类

1.阿里云基本函数

5.辅助函数

imagePNG($thumbImg,'Uploads/file.png'); // 中转站
// 生成图片
$this->putObject('Uploads/file.png',$thumbname);
unlink('Uploads/file.png');
imagedestroy($thumbImg);
/**
 * 把本地变量的内容到文件
 * 简单上传,上传指定变量的内存值作为object的内容
 */
public function putObject($imgPath,$object)
{
  $content = file_get_contents($imgPath); // 把当前文件的内容获取到传入文件中
  $options = array();
  try {
    $this->ossClient->putObject($this->bucket, $object, $content, $options);
  } catch (OssException $e) {
    return $e->getMessage();
  }
  return TRUE;
}
/**
 * 上传指定的本地文件内容
 */
public function uploadFile($imgPath,$object) //$_FILES['img']['tmp_name']
{
  $filePath = $imgPath;
  $options = array();
  try {
    $this->ossClient->uploadFile($this->bucket, $object, $filePath, $options);
  } catch (OssException $e) {
    return $e->getMessage();
  }
  return TRUE;
}
// 删除对象
public function deleteObject($object) {
  try {
    $this->ossClient->deleteObject($this->bucket, $object);
  } catch (OssException $e) {
    return $e->getMessage();
  }
  return TRUE;
}
// 判断对象是否存在
public function doesObjectExist($object) {
  try {
    $result = $this->ossClient->doesObjectExist($this->bucket, $object);
  } catch (OssException $e) {
    return $e->getMessage();
  }
  return $result;
}
// 批量删除对象
public function deleteObjects($objects) {
  try {
    $this->ossClient->deleteObjects($this->bucket, $objects);
  } catch (OssException $e) {
    return $e->getMessage();
  }
  return TRUE;
}
/**
 * 获取object的内容
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
public function getObject($object)
{
  $options = array();
  try {
    $content = $this->ossClient->getObject($this->bucket, $object, $options);
  } catch (OssException $e) {
    return $e->getMessage();
  }
  // file_get_contents
  return $content;
}
public $ossClient,$bucket;
private $configinfo =  array(
  'maxSize'      => -1,  // 上传文件的最大值
  'supportMulti'   => true,  // 是否支持多文件上传
  'allowExts'     => array(),  // 允许上传的文件后缀 留空不作后缀检查
  'allowTypes'    => array(),  // 允许上传的文件类型 留空不做检查
  'thumb'       => false,  // 使用对上传图片进行缩略图处理
  'imageClassPath'  => 'ORG.Util.Image',  // 图库类包路径
  'thumbMaxWidth'   => '',// 缩略图最大宽度
  'thumbMaxHeight'  => '',// 缩略图最大高度
  'thumbPrefix'    => 'thumb_',// 缩略图前缀
  'thumbSuffix'    => '',
  'thumbPath'     => '',// 缩略图保存路径
  'thumbFile'     => '',// 缩略图文件名
  'thumbExt'     => '',// 缩略图扩展名
  'thumbRemoveOrigin' => false,// 是否移除原图
  'zipImages'     => false,// 压缩图片文件上传
  'autoSub'      => false,// 启用子目录保存文件
  'subType'      => 'hash',// 子目录创建方式 可以使用hash date custom
  'subDir'      => '', // 子目录名称 subType为custom方式后有效
  'dateFormat'    => 'Ymd',
  'hashLevel'     => 1, // hash的目录层次
  'savePath'     => '',// 上传文件保存路径
  'autoCheck'     => true, // 是否自动检查附件
  'uploadReplace'   => false,// 存在同名是否覆盖
  'saveRule'     => 'uniqid',// 上传文件命名规则
  'hashType'     => 'md5_file',// 上传文件Hash规则函数名
  );
// 错误信息
private $error = '';
// 上传成功的文件信息
private $uploadFileInfo ;
public function __get($name){
  if(isset($this->configinfo[$name])) {
    return $this->configinfo[$name];
  }
  return null;
}
public function __set($name,$value){
  if(isset($this->configinfo[$name])) {
    $this->configinfo[$name]  =  $value;
  }
}
public function __isset($name){
  return isset($this->configinfo[$name]);
}
/**
 * 架构函数
 * @access public
 * @param array $config 上传参数
 */
public function __construct($config=array()) {
  if(is_array($config)) {
    $this->config  =  array_merge($this->config,$config);
  }
  $this->bucket = C('OSS_TEST_BUCKET');
  $this->ossClient = new OssClient(C('OSS_ACCESS_ID'), C('OSS_ACCESS_KEY'), C('OSS_ENDPOINT'), false);
}

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注