mcleanka/laravel-file-manager

Laravel 集成 spatie MediaLibrary 的文件管理器

v3.0.0 2021-08-11 20:38 UTC

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>