guiszytko / laravel-file-manager
用于 Laravel 的文件管理包。
Requires
- php: >=8.0
- intervention/image: ^3.8
- laravel/framework: ^9.0|^10.0|^11.0
README
Laravel File Manager 是一个简单的 Laravel 文件上传和存储管理包,包括图像缩略图生成支持。它允许使用多态关系将文件关联到模型,并提供上传和删除文件的方法。
目录
安装
要通过 Composer 安装包,请执行以下命令
composer require guiszytko/laravel-file-manager
安装后,Laravel 包自动发现 应该会自动注册 FileManagerServiceProvider
。
配置
1. 发布配置
如果您想自定义默认配置,可以发布包的配置文件
php artisan vendor:publish --provider="Guiszytko\LaravelFileManager\Providers\FileManagerServiceProvider"
2. 执行迁移
包包含一个迁移来创建 files
表。要创建表,请执行迁移
php artisan migrate
这会创建 config/file-manager.php
文件,您可以在其中调整以下选项
generate_thumbnail
:是否自动生成缩略图。thumbnail_size
:缩略图大小(以像素为单位)。storage_path
:文件存储路径。thumbnail_path
:缩略图存储路径。
使用
此包使用一个 trait,允许在模型中直接上传和管理工作。
在模型中
在您的模型中添加 FileUploadTrait
trait 以允许上传与模型关联的文件。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Guiszytko\LaravelFileManager\Traits\FileUploadTrait; class Post extends Model { use FileUploadTrait; protected $fillable = ['title', 'content']; // O método files() será automaticamente adicionado pela trait }
在控制器中
您可以使用 uploadFile()
方法上传文件并将其与模型关联。以下是一个在控制器中实现此操作的示例
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; class PostController extends Controller { public function store(Request $request) { // Validação dos dados $request->validate([ 'title' => 'required|string|max:255', 'content' => 'nullable|string', 'file' => 'required|file|max:10240', // Máximo de 10MB ]); // Criar o post $post = Post::create($request->only('title', 'content')); // Fazer o upload do arquivo, se houver if ($request->hasFile('file')) { $post->uploadFile([ 'file' => $request->file('file'), 'generate_thumbnail' => true, // Gera uma miniatura automaticamente 'folder_path' => 'posts/files', // Define uma pasta específica 'use_date_folders' => true, // Organiza por data ]); } return redirect()->route('posts.index')->with('success', 'Post criado com sucesso!'); } }
在视图中
要显示与模型关联的文件,例如 Post
,您可以遍历文件并在视图中显示它们
@extends('layouts.app') @section('content') <h1>{{ $post->title }}</h1> <p>{{ $post->content }}</p> @if($post->files->count()) @foreach($post->files as $file) <div class="mb-2"> <p><strong>{{ $file->original_name }}</strong></p> @if($file->thumbnail_url) <img src="{{ $file->thumbnail_url }}" alt="Miniatura" class="img-thumbnail"> @endif <img src="{{ $file->url }}" alt="Imagem Original" class="img-fluid"> </div> @endforeach @endif <a href="{{ route('posts.index') }}" class="btn btn-secondary">Voltar</a> @endsection
文件删除
要删除与模型关联的文件,该包在 FileUploadTrait
中提供了 deleteFile()
方法。这使得从数据库和磁盘上删除文件变得容易。
在控制器中
要删除特定文件,您可以在控制器中执行以下操作
public function destroyFile(Request $request, Post $post, $fileId) { try { // Deletar o arquivo usando o método deleteFile da trait $post->deleteFile($fileId); return back()->with('success', 'Arquivo deletado com sucesso!'); } catch (\Exception $e) { return back()->withErrors('Erro ao deletar o arquivo: ' . $e->getMessage()); } }
在视图中
您可以在视图中为每个文件添加一个删除按钮
@foreach($post->files as $file) <div class="mb-2"> <p><strong>{{ $file->original_name }}</strong></p> @if($file->thumbnail_url) <img src="{{ $file->thumbnail_url }}" alt="Miniatura" class="img-thumbnail"> @endif <img src="{{ $file->url }}" alt="Imagem Original" class="img-fluid"> <form action="{{ route('posts.files.destroy', [$post, $file->id]) }}" method="POST" onsubmit="return confirm('Tem certeza que deseja deletar este arquivo?');"> @csrf @method('DELETE') <button type="submit" class="btn btn-danger">Deletar Arquivo</button> </form> </div> @endforeach
文件发布和迁移
如果需要发布迁移或配置文件,该包提供了文件发布选项。
要发布配置文件和迁移,请使用以下命令
php artisan vendor:publish --provider="Guiszytko\LaravelFileManager\Providers\FileManagerServiceProvider"
此命令将发布以下文件
- 配置 在
config/file-manager.php
。 - 迁移 用于创建
files
表。
许可
此包使用 MIT 许可证。
贡献
欢迎贡献!如果您发现任何错误或有改进建议,请随时在 GitHub 仓库 上打开 issue 或发送 pull request。
此文档应已准备好供您的项目使用。如果您需要更多调整或有其他疑问,请随时提问!# laravel-file-manager