工具类:
<?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']);
}
有点迷惘|技术blog
