工具类:
<?php // 文件路径:app\utils\FileUpload.php namespace tools; use think\Validate; class FileUpload { private $maxSize; // 最大文件大小,单位字节 private $allowedExtensions; // 允许的文件后缀 public function __construct($maxSize = 102428800, $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif','pdf']) { $this->maxSize = $maxSize; $this->allowedExtensions = $allowedExtensions; } public function upload($file, $destination) { $validator = new Validate(); $validator->rule('file', 'fileSize:' . $this->maxSize) ->rule('file', 'fileExt:' . implode(',', $this->allowedExtensions)); if (!$validator->check(['file' => $file])) { return ['status' => false, 'message' => $validator->getError()]; } // 如果文件夹不存在,则创建文件夹 if (!is_dir($destination)) { mkdir($destination, 0777, true); } // 生成唯一的文件名 $extension = strtolower($file->extension()); $fileName = md5(uniqid()) . '.' . $extension; // 移动文件到目标路径 $file->move($destination, $fileName); return ['status' => true, 'message' => '文件上传成功', 'file_name' => $fileName]; } }
调用:
$file = $this->request->file('file'); $upload = new FileUpload(102428800, ['pdf']); $result = $upload->upload($file, 'upload/document/pdf'); // 上传到uploads文件夹 if ($result['status']) { $this->success("上传成功!",'/upload/document/pdf/'.$result['file_name']); } else { $this->error('文件上传失败:' . $result['message']); }