From 34aa18c190892932a2c27de5d2b31ec06595a8a0 Mon Sep 17 00:00:00 2001 From: filesite Date: Fri, 30 Sep 2022 18:06:02 +0800 Subject: [PATCH] dir create, rename, move, delete and file delete done --- controller/ApiController.php | 211 ++++++++++++++++++++++++++++++++++- 1 file changed, 210 insertions(+), 1 deletion(-) diff --git a/controller/ApiController.php b/controller/ApiController.php index 4ab8b96..9013efe 100644 --- a/controller/ApiController.php +++ b/controller/ApiController.php @@ -36,7 +36,7 @@ Class ApiController extends Controller { $scanner = new DirScanner(); $scanner->setWebRoot(FSC::$app['config']['content_directory']); - $target = __DIR__ . '//../www/' . FSC::$app['config']['content_directory']; + $target = __DIR__ . '/../www/' . FSC::$app['config']['content_directory']; $maxLevels = 2; $dirTree = $scanner->scan($target, $maxLevels); $scanResults = $scanner->getScanResults(); @@ -75,4 +75,213 @@ Class ApiController extends Controller { return $this->renderJson(compact('code', 'msg', 'err', 'data')); } + //创建目录 + public function actionMkdir() { + $code = 0; + $msg = $err = ''; + $data = array(); + + + $parentDir = $this->post('parent', ''); + $newDir = $this->post('dir', ''); + $maxDirLen = 20; + if (empty($newDir) || mb_strlen($newDir, 'utf-8') > $maxDirLen) { + $err = "目录名不能为空且最长 {$maxDirLen} 个字符"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + }else if (strpos($newDir, '/') !== false) { + $err = "待创建的目录名称中不能包含斜杠字符!"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + $target = __DIR__ . '/../www/' . FSC::$app['config']['content_directory']; + if (!empty($parentDir)) { + $target = "{$target}/{$parentDir}"; + } + if (!is_dir($target)) { + $err = "父目录{$parentDir}不存在"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + try { + $res = mkdir("{$target}/{$newDir}"); + if ($res) { + $code = 1; + $msg = '目录创建完成'; + }else { + $err = '目录创建失败,请确认参数格式正确及父目录权限配置正确!'; + } + }catch(Exception $e) { + $err = $e->getMessage(); + } + + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + //删除目录 + public function actionRmdir() { + $code = 0; + $msg = $err = ''; + $data = array(); + + + $parentDir = $this->post('parent', ''); + $delDir = $this->post('dir', ''); + $maxDirLen = 20; + if (empty($delDir) || mb_strlen($delDir, 'utf-8') > $maxDirLen) { + $err = "目录名不能为空且最长 {$maxDirLen} 个字符"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + }else if (strpos($delDir, '/') !== false) { + $err = "待删除的目录名称中不能包含斜杠字符!"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + $target = __DIR__ . '/../www/' . FSC::$app['config']['content_directory']; + if (!empty($parentDir)) { + $target = "{$target}/{$parentDir}"; + } + if (!is_dir($target)) { + $err = "父目录{$parentDir}不存在"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + try { + $res = rmdir("{$target}/{$delDir}"); + if ($res) { + $code = 1; + $msg = '目录删除完成'; + }else { + $err = '目录删除失败,请确认被删除目录存在及父目录权限配置正确!'; + } + }catch(Exception $e) { + $err = $e->getMessage(); + } + + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + //移动目录 + public function actionMove() { + $code = 0; + $msg = $err = ''; + $data = array(); + + + $parentDir = $this->post('parent', ''); + $fromDir = $this->post('from', ''); + $toDir = $this->post('to', ''); + $maxDirLen = 50; + if (empty($fromDir) || mb_strlen($fromDir, 'utf-8') > $maxDirLen || empty($toDir) || mb_strlen($toDir, 'utf-8') > $maxDirLen) { + $err = "目录名不能为空且最长 {$maxDirLen} 个字符"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + $target = __DIR__ . '/../www/' . FSC::$app['config']['content_directory']; + if (!empty($parentDir)) { + $target = "{$target}/{$parentDir}"; + } + if (!is_dir($target)) { + $err = "父目录{$parentDir}不存在"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + try { + $res = rename("{$target}/{$fromDir}", "{$target}/{$toDir}"); + if ($res) { + $code = 1; + $msg = '目录移动完成'; + }else { + $err = '目录移动失败,请确认被移动目录存在及目标目录权限配置正确!'; + } + }catch(Exception $e) { + $err = $e->getMessage(); + } + + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + //重命名目录或文件 + public function actionRename() { + $code = 0; + $msg = $err = ''; + $data = array(); + + + $parentDir = $this->post('parent', ''); + $fromDir = $this->post('from', ''); + $toDir = $this->post('to', ''); + $maxDirLen = 20; + if (empty($fromDir) || mb_strlen($fromDir, 'utf-8') > $maxDirLen || empty($toDir) || mb_strlen($toDir, 'utf-8') > $maxDirLen) { + $err = "目录名不能为空且最长 {$maxDirLen} 个字符"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + }else if (strpos($fromDir, '/') !== false || strpos($toDir, '/') !== false) { + $err = "目录名称中不能包含斜杠字符!"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + $target = __DIR__ . '/../www/' . FSC::$app['config']['content_directory']; + if (!empty($parentDir)) { + $target = "{$target}/{$parentDir}"; + } + if (!is_dir($target)) { + $err = "父目录{$parentDir}不存在"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + try { + $res = rename("{$target}/{$fromDir}", "{$target}/{$toDir}"); + if ($res) { + $code = 1; + $msg = '目录移动完成'; + }else { + $err = '目录移动失败,请确认被移动目录存在及目标目录权限配置正确!'; + } + }catch(Exception $e) { + $err = $e->getMessage(); + } + + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + //删除文件 + public function actionDelete() { + $code = 0; + $msg = $err = ''; + $data = array(); + + + $parentDir = $this->post('parent', ''); + $delFile = $this->post('file', ''); + $maxDirLen = 30; + if (empty($delFile) || mb_strlen($delFile, 'utf-8') > $maxDirLen) { + $err = "文件名不能为空且最长 {$maxDirLen} 个字符"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + }else if (strpos($delFile, '/') !== false) { + $err = "待删除的文件名称中不能包含斜杠字符!"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + $target = __DIR__ . '/../www/' . FSC::$app['config']['content_directory']; + if (!empty($parentDir)) { + $target = "{$target}/{$parentDir}"; + } + if (!is_dir($target)) { + $err = "父目录{$parentDir}不存在"; + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + + try { + $res = unlink("{$target}/{$delFile}"); + if ($res) { + $code = 1; + $msg = '文件删除完成'; + }else { + $err = '文件删除失败,请确认被删除文件存在及父目录权限配置正确!'; + } + }catch(Exception $e) { + $err = $e->getMessage(); + } + + return $this->renderJson(compact('code', 'msg', 'err', 'data')); + } + }