laravel 自定义组件上传文件

PHP   2024-05-31 14:20   270   0  

背景:laravel-admin文件上传扩展是支持上传文件到oss或者本地的,但是在配置oss后文件不能同时上传到本地(应该是相关扩展的限制)。

目标:实现文件上传oss同时文件本地上传

实践

  • 文件本地上传
    • 正常使用$form->image($column[, $label])或者$form->file($column[, $label]);
  • oss扩展安装
  • oss表单扩展创建

    • 创建 App\Admin\Extensions\AdminOssImageUpload.php;

      namespace App\Admin\Extensions;
      
      use Encore\Admin\Form\Field\File;
      use Illuminate\Support\Facades\Storage;
      
      class AdminOssImageUpload extends File
      {
          protected $view = 'admin::form.file'; // 引用后台视图
      
          public function prepare($image)
          {
              // 文件上传.......
              $path = $image->getRealPath();
              $filename = $this->getRandStr().time().'.'.$ext; // 自定义文件名称
              $storage = Storage::disk('oss');
              $storage->putFileAs('/img/', $path, $filename); // 文件上传操作
              // 文件上传end.......
      
              return $url; // 返回上传后路由即可
          }
      }
    • 扩展注册,修改 App\Admin\bootstrap.php 文件

      use App\Admin\Extensions\AdminOssImageUpload;
      
      Form::extend('ossImage', AdminOssImageUpload::class);
    • 使用
      $form->ossImage($column[, $label]);

结果:文件可正常到oss,同时可以使用本地上传

参考