ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 封装上传方法 > 一、打开项目在config文件夹下创建upload.php配置文件用来管理文件上传的后缀和大小 ```php <?php return [ //定义允许上传文件后缀的数组 'suffix_arr' => [ //允许图片上传的后缀 'image' => 'jpg,jpeg,png,gif', //允许上传文件的后缀 'file' => 'zip,gz,doc,txt,pdf,xls', //... ], //定义允许上传文件大小的数组 'size_arr' => [ //允许图片上传的大小 'image' => 10, //允许文件上传的大小 'file' => 50 ], ]; ``` > 二、修改config\filesystem.php配置文件配置上传根目录及上传规则 ```php <?php return [ // 默认磁盘 'default' => 'local', // 磁盘列表 'disks' => [ 'local' => [ 'type' => 'local', 'root' => app()->getRuntimePath() . 'storage', ], 'public' => [ // 磁盘类型 'type' => 'local', // 磁盘路径 'root' => app()->getRootPath() . 'public/storage', // 磁盘路径对应的外部URL路径 'url' => '/storage', // 可见性 'visibility' => 'public', ], // 更多的磁盘配置信息 'excel' => [ // 磁盘类型 'type' => 'local', // 磁盘路径 'root' => app()->getRootPath() . 'public', // 磁盘路径对应的外部URL路径 'url' => '/excel', // 可见性 'visibility' => 'public', ], ], ]; ``` > 在app\controller目录下创建Upload.php类并编写upload()文件上传方法,如果是这样加个post请求判断 > > 放在common方法里的话,可以直接调用 ```php /** * 上传方法 * @param $file * @param string $name * @param string $type * @return bool|\think\response\Json * * User: mi * Date: 2020-09-14 */ public function upload($file, $name = 'file', $type = 'file') { //接收文件上传类型 // $type = request()->param('type', '', 'trim'); // $name = request()->param('name', '', 'trim'); // // //获取表单上传文件 // $file = request()->file('file'); //组装文件保存目录 $upload_dir = '/' . $type . '/' . $name; try { //从config/upload.php配置文件中读取允许上传的文件后缀和大小 $suffix_config = config('upload.suffix_arr'); $size_config = config('upload.size_arr'); if (empty($size_config[$type]) || empty($size_config[$type])) { return false; } else { $suffix = $suffix_config[$type]; $size = $size_config[$type]; } //验证器验证上传的文件 validate(['file' => [ //限制文件大小 'fileSize' => $size * 1024 * 1024, //限制文件后缀 'fileExt' => $suffix ]], [ 'file.fileSize' => '上传的文件大小不能超过' . $size . 'M', 'file.fileExt' => '请上传后缀为:' . $suffix . '的文件' ])->check(['file' => $file]); //上传文件到本地服务器 $filename = \think\facade\Filesystem::disk('public')->putFile($upload_dir, $file); if ($filename) { $src = '/storage/' . $filename; // return json(['code' => 1, 'result' => $src]); return $src; } else { return json(['code' => 0, 'msg' => '上传失败']); } } catch (ValidateException $e) { return json(['code' => 0, 'msg' => $e->getMessage()]); } } ```