文件管理模块实现总结

最后更新: 2026-01-27 11:02:47

文件管理模块实现总结

一、实现内容

1. 文件分类管理 ✅

#### 数据库

  • file_categories 表:存储文件分类信息
  • - id, name, code, description, sort, status, created_at, updated_at, delete_time

    #### 后端

  • FileCategory 模型 (app/admin/model/FileCategory.php)
  • - 提供分类查询和管理方法 - findByCode() - 根据代码查找 - getEnabledCategories() - 获取所有启用的分类

  • FileCategoryController 控制器 (app/admin/controller/FileCategoryController.php)
  • - index() - 分类列表 - show() - 分类详情 - store() - 创建分类 - update() - 更新分类 - destroy() - 删除分类 - enabled() - 获取启用的分类(用于下拉选择)

    #### 前端

  • FileCategories.vue (resources/js/admin/views/files/FileCategories.vue)
  • - 文件分类管理页面 - 支持添加、编辑、删除分类 - 分类代码创建后不可修改

    2. 公共文件上传接口 ✅

    #### 目录结构

    common/
    ├── File/
    │   ├── FileUploadService.php    # 文件上传服务
    │   ├── FileManagerService.php   # 文件管理服务
    │   └── README.md                # 使用文档
    └── README.md                    # 公共接口目录说明
    

    #### FileUploadService

  • upload() - 单文件上传
  • - 支持文件大小限制 - 支持文件类型验证 - 支持分类代码或分类 ID - 支持文件夹、描述等参数
  • uploadMultiple() - 批量上传
  • #### FileManagerService

  • getFile() - 根据 ID 获取文件
  • getFileByPath() - 根据路径获取文件
  • deleteFile() - 删除文件
  • getFileUrl() - 获取文件 URL
  • 3. 文件管理改进 ✅

    #### 数据库修改

  • files 表:添加 category_id 字段(外键关联 file_categories)
  • 保留 category 字段用于兼容(后续可删除)
  • #### 后端改进

  • FileController 使用 FileUploadService 进行上传
  • 文件列表返回时加载分类信息
  • 统计功能使用分类 ID 进行统计
  • #### 前端改进

  • 文件分类从输入框改为下拉选择(只能选择预设分类)
  • 搜索和筛选使用 category_id
  • 上传和编辑表单使用分类下拉选择
  • 二、使用方式

    1. 在管理后台管理文件分类

    访问文件分类管理页面,添加分类:

  • 分类名称:如"图片"、"文档"等
  • 分类代码:如"image"、"document"等(唯一标识,用于程序调用)
  • 描述、排序、状态等
  • 2. 在客户端应用中使用公共上传接口

    use Common\File\FileUploadService;
    

    // 在控制器中 $uploadService = new FileUploadService(); $result = $uploadService->upload($file, [ 'category_code' => 'image', // 使用分类代码 'folder' => 'uploads', // 文件夹 'description' => '描述', // 描述 'max_size' => 10 1024 1024, // 文件大小限制 'allowed_types' => ['image/jpeg', 'image/png'], // 允许的类型 ]);

    3. 文件管理

    use Common\File\FileManagerService;
    

    $fileManager = new FileManagerService();

    // 获取文件 $file = $fileManager->getFile($fileId);

    // 获取文件URL $url = $fileManager->getFileUrl($fileId);

    // 删除文件 $fileManager->deleteFile($fileId);

    三、数据库迁移

    需要运行以下迁移:

    php console migrate
    

    迁移文件:

  • 20250108080000_create_files_table.php - 创建文件表
  • 20250108080001_create_file_categories_table.php - 创建文件分类表
  • 20250108080002_modify_files_table_add_category_id.php - 添加 category_id 字段
  • 四、路由配置

    后端路由(已添加)

    // 文件管理路由
    /admin/api/files/*
    

    // 文件分类管理路由 /admin/api/file-categories/*

    前端路由(需要添加)

    需要在 Vue 路由中添加文件分类管理页面:

    {
      path: '/files/categories',
      name: 'FileCategories',
      component: () => import('../views/files/FileCategories.vue'),
    }
    

    五、Composer 自动加载

    已更新 composer.json,添加了 Common 命名空间:

    "autoload": {
        "psr-4": {
            "Common\\": "common/"
        }
    }
    
    需要运行:
    composer dump-autoload
    

    六、功能特性

    ✅ 已实现

  • 文件分类管理(CRUD)
  • 文件分类只能由管理员设置,运营人员只能选择
  • 公共文件上传服务(供客户端调用)
  • 文件管理服务(查询、删除等)
  • 文件管理使用预设分类
  • 支持多种存储方式(local、OSS、S3 等)
  • 📝 使用示例

  • examples/file_upload_usage.php - 完整的使用示例
  • common/File/README.md - 使用文档
  • 七、后续建议

  • 文件分类预设数据:可以创建迁移文件,预设一些常用分类(图片、文档、视频等)
  • 文件分类权限:可以添加权限控制,限制某些角色只能使用特定分类
  • 文件审核:可以添加文件审核功能
  • 文件水印:图片上传时自动添加水印
  • 文件压缩:大图片自动压缩