guiszytko/laravel-file-manager

用于 Laravel 的文件管理包。

v1.0.3 2024-09-16 13:17 UTC

This package is not auto-updated.

Last update: 2024-09-30 13:28:22 UTC


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"

此命令将发布以下文件

  1. 配置config/file-manager.php
  2. 迁移 用于创建 files 表。

许可

此包使用 MIT 许可证

贡献

欢迎贡献!如果您发现任何错误或有改进建议,请随时在 GitHub 仓库 上打开 issue 或发送 pull request。

此文档应已准备好供您的项目使用。如果您需要更多调整或有其他疑问,请随时提问!# laravel-file-manager