企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 为什么要使用自定义上传? 场景:如果重写了表单的store(新增)或者 update(更新) 其中有涉及到文件上传,会存在一个问题,需要方法中去处理上传文件的逻辑才行,最开始想沿用原来store方法中的上传,发现不行,其中上传类中验证方法都是 `protected`受保护的,不能调用,故放弃。另辟蹊径选择了自定义上传类来处理。这样新增和更新方法中就无须关系上传的问题。 ### 定义上传类 ``` <?php namespace App\Admin\Controllers; use Dcat\Admin\Traits\HasUploadedFile; use Illuminate\Http\Request; class UploadController { use HasUploadedFile; /** * $form->image('banner', '轮播')->removable(false) ->withFormData(['path'=>"banner/" . date('Ymd')]) ->url('upload')->required(); 带上path 设置url即可 * 上传文件到oss * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function handle(Request $request) { if ($request->hasFile('_file_')) { try { // 如果有图片传入 或者 如果有文件传入 $file=$request->file('_file_'); $path=$request->input('path'); if(empty($path)){ return $this->responseErrorMessage('自定义上传请先设置path存储路径'); } $url =\OSSPublic::uploadFile($path, $file); // 自定义的方法 只要返回上传地址即可 return $this->responseUploaded($url, $url); // 必须使用Dcat系统自带的文件上传返回数据 } catch (\Exception $e) { return $this->responseErrorMessage('上传失败:' . $e->getMessage()); } } return $this->responseErrorMessage('文件上传失败'); } } ``` ### 定义路由 ~~~ // 自定义上传文件 $router->any('upload', 'UploadController@handle'); ~~~ ### 表单中使用 ``` $form->image('banner', '轮播')->removable(false) ->withFormData(['path'=>"banner/" . date('Ymd')]) // withFormData 可带的参数 ->url('upload') // 设置上传的地址 ->required(); // 带上path 设置url即可 ```