递归获取图库文件夹

This commit is contained in:
Edward Yang 2022-07-22 11:39:47 +08:00
parent 1d634be011
commit 182539abcb
3 changed files with 46 additions and 10 deletions

View File

@ -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);
}
/**
* 创建文件夹

View File

@ -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');

View File

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