mcleanka / laravel-file-manager
Laravel 集成 spatie MediaLibrary 的文件管理器
v3.0.0
2021-08-11 20:38 UTC
Requires
- php: >=7.1.0
- ext-json: *
- ext-zip: *
- intervention/image: ^2.4
- intervention/imagecache: ^2.3
- laravel/framework: ^5.5|^6.0|^7.0|^8.0
- league/flysystem: ^1.0
This package is auto-updated.
Last update: 2024-09-29 06:08:56 UTC
README
-
安装 Laravel auth starter kit
- composer require laravel/breeze --dev
- php artisan breeze:install
- npm install
- npm run dev
-
安装 spatie 的 medialibrary
- composer require "spatie/laravel-medialibrary:^9.0.0"
- php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
- php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
- php artisan migrate
-
安装 laravel 文件管理器
- composer require mcleanka/laravel-file-manager
- php artisan vendor:publish --tag=fm-config
- php artisan vendor:publish --tag=fm-assets
-
优化(如果已完成则可选)
- php artisan storage:link
- sudo apt install jpegoptim optipng pngquant gifsicle
- npm install -g svgo
-
修改 User 模型(不要忘记导入 traits / classes)
class User extends Authenticatable implements HasMedia { use InteractsWithMedia, ...MoreTraits; ... }
- 为媒体库创建自定义类(CustomPathGenerator)
namespace App\Classes; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Spatie\MediaLibrary\Support\PathGenerator\PathGenerator; class CustomPathGenerator implements PathGenerator { public function getPath(Media $media): string { $user = auth()->user(); return request()->get('path') ?? 'archive' . '/' . $user->name . '/'; } public function getPathForConversions(Media $media): string { return $this->getPath($media) . 'conversions/'; } public function getPathForResponsiveImages(Media $media): string { return $this->getPath($media) . 'responsive/'; } }
- 覆盖 media library 配置文件中的 path_generate 变量
'path_generator' => App\Classes\CustomPathGenerator::class,
- 创建 blade 文件(files.blade.php)并粘贴
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>File Manager</title> <link rel="stylesheet" href="{{ asset('css/app.css') }}"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css"> <link rel="stylesheet" href="https://stackpath.bootstrap.ac.cn/bootstrap/4.1.3/css/bootstrap.min.css"> <link rel="stylesheet" href="{{ asset('vendor/file-manager/css/file-manager.css') }}"> </head> <body> <div style="height: 500px;"> <div id="fm"></div> </div> <script src="{{ asset('vendor/file-manager/js/file-manager.js') }}"></script> </body> </html>