From 182539abcb4a2036949e9e739d61019e381cbca2 Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Fri, 22 Jul 2022 11:39:47 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=92=E5=BD=92=E8=8E=B7=E5=8F=96=E5=9B=BE?= =?UTF-8?q?=E5=BA=93=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/FileManagerController.php | 12 ++++++ beike/Admin/Routes/admin.php | 3 +- beike/Admin/Services/FileManagerService.php | 41 +++++++++++++++---- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/beike/Admin/Http/Controllers/FileManagerController.php b/beike/Admin/Http/Controllers/FileManagerController.php index 73b30503..0e8f4535 100644 --- a/beike/Admin/Http/Controllers/FileManagerController.php +++ b/beike/Admin/Http/Controllers/FileManagerController.php @@ -26,6 +26,18 @@ class FileManagerController extends Controller return view('admin::pages.file_manager.index', $data); } + /** + * 获取文件夹和文件列表 + * @param Request $request + * @return mixed + * @throws \Exception + */ + public function getDirectories(Request $request) + { + $baseFolder = $request->get('base_folder'); + return (new FileManagerService)->getDirectories($baseFolder); + } + /** * 创建文件夹 diff --git a/beike/Admin/Routes/admin.php b/beike/Admin/Routes/admin.php index e8b1de58..4798a6f3 100644 --- a/beike/Admin/Routes/admin.php +++ b/beike/Admin/Routes/admin.php @@ -40,7 +40,8 @@ Route::prefix($adminName) Route::resource('files', Controllers\FileController::class); Route::get('file_manager', [Controllers\FileManagerController::class, 'index'])->name('file_manager.index'); - Route::post('file_manager/directory', [Controllers\FileManagerController::class, 'createDirectory'])->name('file_manager.create_directory'); + Route::get('file_manager/directories', [Controllers\FileManagerController::class, 'getDirectories'])->name('file_manager.get_directories'); + Route::post('file_manager/directories', [Controllers\FileManagerController::class, 'createDirectory'])->name('file_manager.create_directory'); Route::post('file_manager/upload', [Controllers\FileManagerController::class, 'uploadFiles'])->name('file_manager.upload'); Route::post('file_manager/rename', [Controllers\FileManagerController::class, 'rename'])->name('file_manager.rename'); Route::delete('file_manager/delete_files', [Controllers\FileManagerController::class, 'destroyFiles'])->name('file_manager.delete_files'); diff --git a/beike/Admin/Services/FileManagerService.php b/beike/Admin/Services/FileManagerService.php index 9a462319..46497ab5 100644 --- a/beike/Admin/Services/FileManagerService.php +++ b/beike/Admin/Services/FileManagerService.php @@ -24,6 +24,35 @@ class FileManagerService } + /** + * 获取某个目录下所有文件夹 + */ + public function getDirectories($baseFolder = '/'): array + { + $currentBasePath = $this->fileBasePath . $baseFolder; + $directories = glob("{$currentBasePath}/*", GLOB_ONLYDIR); + + $result = []; + foreach ($directories as $directory) { + $baseName = basename($directory); + if ($baseName == 'index.html') { + continue; + } + + $fileName = str_replace($this->fileBasePath, '', $directory); + if (is_dir($directory)) { + $item = $this->handleFolder($fileName, $baseName); + $subDirectories = self::getDirectories($fileName); + if ($subDirectories) { + $item['children'] = $subDirectories; + } + $result[] = $item; + } + } + return $result; + } + + /** * 获取某个目录下的文件和文件夹 * @@ -34,12 +63,7 @@ class FileManagerService */ public function getFiles($baseFolder, int $page = 1): array { - $fileBasePath = $this->fileBasePath; - if ($baseFolder) { - $currentBasePath = $fileBasePath . $baseFolder; - } else { - $currentBasePath = $fileBasePath; - } + $currentBasePath = $this->fileBasePath . $baseFolder; $files = glob($currentBasePath . '/*'); $folders = $images = []; @@ -49,7 +73,7 @@ class FileManagerService continue; } - $fileName = str_replace($fileBasePath, '', $file); + $fileName = str_replace($this->fileBasePath, '', $file); if (is_dir($file)) { $folders[] = $this->handleFolder($fileName, $baseName); } elseif (is_file($file)) { @@ -141,8 +165,7 @@ class FileManagerService { return [ 'path' => $folderPath, - 'name' => $baseName, - 'leaf' => !$this->hasSubFolders($folderPath), + 'name' => $baseName ]; }