Exemple #1
0
 public function run()
 {
     $dir = isset($_GET['dir']) ? trim($_GET['dir']) : 'file';
     $ext_arr = array('image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'), 'flash' => array('swf', 'flv'), 'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'), 'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'));
     if (empty($ext_arr[$dir])) {
         echo CJSON::encode(array('error' => 1, 'message' => '目录名不正确。'));
         exit;
     }
     $originalurl = '';
     $filename = '';
     $date = date('Ymd');
     $id = 0;
     $max_size = 2097152;
     //2MBs
     $upload_image = CUploadedFile::getInstanceByName('imgFile');
     Yii::import('ext.KEditor.KEditor');
     $upload_dir = KEditor::getUploadPath() . '/' . $dir;
     if (!file_exists($upload_dir)) {
         mkdir($upload_dir);
     }
     $upload_dir = $upload_dir . '/' . $date;
     if (!file_exists($upload_dir)) {
         mkdir($upload_dir);
     }
     $upload_url = KEditor::getUploadUrl() . '/' . $dir . '/' . $date;
     if (is_object($upload_image) && get_class($upload_image) === 'CUploadedFile') {
         if ($upload_image->size > $max_size) {
             echo CJSON::encode(array('error' => 1, 'message' => '上传文件大小超过限制。'));
             exit;
         }
         //新文件名
         $filename = date("YmdHis") . '_' . rand(10000, 99999);
         $ext = $upload_image->extensionName;
         if (in_array($ext, $ext_arr[$dir]) === false) {
             echo CJSON::encode(array('error' => 1, 'message' => "上传文件扩展名是不允许的扩展名。\n只允许" . implode(',', $ext_arr[$dir]) . '格式。'));
             exit;
         }
         $uploadfile = $upload_dir . '/' . $filename . '.' . $ext;
         $originalurl = $upload_url . '/' . $filename . '.' . $ext;
         $upload_image->saveAs($uploadfile);
         $upload = new Upload();
         $upload->type = $dir;
         $upload->name = $filename;
         $relativeUploadfile = str_replace(Yii::getPathOfAlias('webroot') . DIRECTORY_SEPARATOR, '', $uploadfile);
         $upload->save();
         echo CJSON::encode(array('error' => 0, 'url' => $originalurl));
     } else {
         echo CJSON::encode(array('error' => 1, 'message' => '未知错误'));
     }
 }
 public function run()
 {
     Yii::import('ext.KEditor.KEditor');
     $root_path = KEditor::getUploadPath() . '/';
     $root_url = KEditor::getUploadUrl() . '/';
     //图片扩展名
     $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
     //目录名
     $dir_name = empty($_GET['dir']) ? '' : trim($_GET['dir']);
     if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
         echo "Invalid Directory name.";
         exit;
     }
     if ($dir_name !== '') {
         $root_path .= $dir_name . "/";
         $root_url .= $dir_name . "/";
         if (!file_exists($root_path)) {
             mkdir($root_path);
         }
     }
     //根据path参数,设置各路径和URL
     if (empty($_GET['path'])) {
         $current_path = realpath($root_path) . '/';
         $current_url = $root_url;
         $current_dir_path = '';
         $moveup_dir_path = '';
     } else {
         $current_path = realpath($root_path) . '/' . $_GET['path'];
         $current_url = $root_url . $_GET['path'];
         $current_dir_path = $_GET['path'];
         $moveup_dir_path = preg_replace('/(.*?)[^\\/]+\\/$/', '$1', $current_dir_path);
     }
     echo realpath($root_path);
     //排序形式,name or size or type
     $order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);
     //不允许使用..移动到上一级目录
     if (preg_match('/\\.\\./', $current_path)) {
         echo 'Access is not allowed.';
         exit;
     }
     //最后一个字符不是/
     if (!preg_match('/\\/$/', $current_path)) {
         echo 'Parameter is not valid.';
         exit;
     }
     //目录不存在或不是目录
     if (!file_exists($current_path) || !is_dir($current_path)) {
         echo 'Directory does not exist.';
         exit;
     }
     //遍历目录取得文件信息
     $file_list = array();
     $handle = new DirectoryIterator($current_path);
     $i = 0;
     foreach ($handle as $file) {
         if ($file->isDot()) {
             continue;
         }
         if ($file->isDir()) {
             $file_list[$i]['is_dir'] = true;
             //是否文件夹
             $file_list[$i]['has_file'] = count(scandir($file->getPath())) > 2;
             //文件夹是否包含文件
             $file_list[$i]['filesize'] = 0;
             //文件大小
             $file_list[$i]['is_photo'] = false;
             //是否图片
             $file_list[$i]['filetype'] = '';
             //文件类别,用扩展名判断
         } else {
             $file_list[$i]['is_dir'] = false;
             $file_list[$i]['has_file'] = false;
             $file_list[$i]['filesize'] = $file->getSize();
             $file_list[$i]['dir_path'] = '';
             $file_ext = $file->getExtension();
             $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
             $file_list[$i]['filetype'] = $file_ext;
         }
         $file_list[$i]['filename'] = $file->getFilename();
         //文件名,包含扩展名
         $file_list[$i]['datetime'] = date('Y-m-d H:i:s', $file->getMTime());
         $i++;
     }
     usort($file_list, array($this, 'cmp_func'));
     $result = array();
     //相对于根目录的上一级目录
     $result['moveup_dir_path'] = $moveup_dir_path;
     //相对于根目录的当前目录
     $result['current_dir_path'] = $current_dir_path;
     //当前目录的URL
     $result['current_url'] = $current_url;
     //文件数
     $result['total_count'] = count($file_list);
     //文件列表数组
     $result['file_list'] = $file_list;
     //输出JSON字符串
     header('Content-type: application/json; charset=UTF-8');
     echo CJSON::encode($result);
     exit;
 }