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; }