diff --git a/beike/Admin/Http/Controllers/FilemanagerController.php b/beike/Admin/Http/Controllers/FilemanagerController.php index 3117d171..43a0fd16 100644 --- a/beike/Admin/Http/Controllers/FilemanagerController.php +++ b/beike/Admin/Http/Controllers/FilemanagerController.php @@ -25,4 +25,61 @@ class FileManagerController extends Controller return view('admin::pages.file_manager.index', $data); } + + + /** + * 创建文件夹 + * POST /admin/file_manager + * @throws \Exception + */ + public function store(Request $request): array + { + $folderName = $request->get('name'); + (new FileManagerService)->createDirectory($folderName); + return json_success('创建成功'); + } + + + /** + * 删除文件或文件夹 + * DELETE /admin/file_manager/{file_manager} + * @throws \Exception + */ + public function destroy(Request $request): array + { + $folderName = $request->get('name'); + (new FileManagerService)->deleteDirectoryOrFile($folderName); + return json_success('删除成功'); + } + + + /** + * 文件或文件夹改名 + * PUT /admin/file_manager/{file_manager} + */ + public function update(Request $request) + { + $folderName = $request->get('name'); + (new FileManagerService)->updateName($folderName); + return json_success('删除成功'); + } + + + /** + * 上传文件 + * POST /admin/file_manager/upload + * + * @param Request $request + * @return array + */ + public function uploadFiles(Request $request): array + { + $file = $request->file('file'); + $path = $file->store('xxx', 'upload'); + + return [ + 'name' => $file->getClientOriginalName(), + 'url' => asset('upload/' . $path), + ]; + } } diff --git a/beike/Admin/Providers/AdminServiceProvider.php b/beike/Admin/Providers/AdminServiceProvider.php index 8db9286d..86e086bf 100644 --- a/beike/Admin/Providers/AdminServiceProvider.php +++ b/beike/Admin/Providers/AdminServiceProvider.php @@ -22,15 +22,15 @@ class AdminServiceProvider extends ServiceProvider */ public function boot() { - $uri = request()->getRequestUri(); load_settings(); + $this->loadRoutesFrom(__DIR__ . '/../Routes/admin.php'); + $uri = request()->getRequestUri(); $adminName = admin_name(); if (!Str::startsWith($uri, "/{$adminName}")) { return; } - $this->loadRoutesFrom(__DIR__ . '/../Routes/admin.php'); $this->mergeConfigFrom(__DIR__ . '/../../Config/beike.php', 'beike'); $this->loadViewsFrom(resource_path('/beike/admin/views'), 'admin'); diff --git a/beike/Admin/Routes/admin.php b/beike/Admin/Routes/admin.php index 023eb9b2..5414cf10 100644 --- a/beike/Admin/Routes/admin.php +++ b/beike/Admin/Routes/admin.php @@ -22,6 +22,7 @@ Route::prefix($adminName) Route::Resource('files', \Beike\Admin\Http\Controllers\FileController::class); Route::Resource('file_manager', \Beike\Admin\Http\Controllers\FileManagerController::class); + Route::post('file_manager/upload', [\Beike\Admin\Http\Controllers\FileManagerController::class, 'uploadFiles'])->name('file_manager.upload'); Route::Resource('customers', \Beike\Admin\Http\Controllers\CustomerController::class); Route::resource('customers.addresses', \Beike\Admin\Http\Controllers\AddressController::class); diff --git a/beike/Admin/Services/FileManagerService.php b/beike/Admin/Services/FileManagerService.php index 1eb1b810..6a90cfb6 100644 --- a/beike/Admin/Services/FileManagerService.php +++ b/beike/Admin/Services/FileManagerService.php @@ -69,6 +69,46 @@ class FileManagerService } + /** + * 创建目录 + * @param $folderName + * @throws \Exception + */ + public function createDirectory($folderName) + { + $folderPath = public_path("catalog/{$folderName}"); + if (is_dir($folderPath)) { + throw new \Exception("目录已存在"); + } + createDirectories(dirname($folderName)); + } + + + /** + * @param $filePath + * @throws \Exception + */ + public function deleteDirectoryOrFile($filePath) + { + $filePath = public_path("catalog/{$filePath}"); + if (is_dir($filePath)) { + $files = glob($filePath . '/*'); + if ($files) { + throw new \Exception("该目录不为空"); + } + @rmdir($filePath, 0755); + } elseif (file_exists($filePath)) { + @unlink($filePath); + } + } + + + public function updateName() + { + + } + + /** * 处理文件夹 * diff --git a/beike/Helpers.php b/beike/Helpers.php index 312bca38..6fc4d49f 100644 --- a/beike/Helpers.php +++ b/beike/Helpers.php @@ -1,6 +1,5 @@ toSql(); - foreach ($builder->getBindings() as $binding) { - $value = is_numeric($binding) ? $binding : "'" . $binding . "'"; - $sql = preg_replace('/\?/', $value, $sql, 1); +/** + * 根据 $builder 对象输出SQL语句 + * @param mixed $builder + * @return string|string[]|null + */ +function to_sql($builder) +{ + $sql = $builder->toSql(); + foreach ($builder->getBindings() as $binding) { + $value = is_numeric($binding) ? $binding : "'" . $binding . "'"; + $sql = preg_replace('/\?/', $value, $sql, 1); + } + return $sql; +} + + +/** + * 递归创建文件夹 + * @param $directoryPath + */ +function createDirectories($directoryPath) +{ + $path = ''; + $directories = explode('/', $directoryPath); + foreach ($directories as $directory) { + $path = $path . '/' . $directory; + if (!is_dir(public_path($path))) { + @mkdir(public_path($path), 0755); } - return $sql; } } diff --git a/beike/Services/ImageService.php b/beike/Services/ImageService.php index 59615ef3..3c9818d2 100644 --- a/beike/Services/ImageService.php +++ b/beike/Services/ImageService.php @@ -48,7 +48,7 @@ class ImageService $newImagePath = public_path($newImage); if (!is_file($newImagePath) || (filemtime($this->imagePath) > filemtime($newImagePath))) { - $this->createDirectories($newImage); + createDirectories(dirname($newImage)); $img = Image::make($this->imagePath); $img->resize($width, $height, function ($constraint) { @@ -61,22 +61,4 @@ class ImageService } return asset($newImage); } - - - /** - * 递归创建缓存文件夹 - * - * @param $imagePath - */ - private function createDirectories($imagePath) - { - $path = ''; - $directories = explode('/', dirname($imagePath)); - foreach ($directories as $directory) { - $path = $path . '/' . $directory; - if (!is_dir(public_path($path))) { - @mkdir(public_path($path), 0755); - } - } - } }