<?php
namespace app\common\lib\files;
use think\Exception;
use think\exception\ValidateException;
class upload
{
private $domain;
protected $name;
protected $type;
protected $module;
protected $image;
public function __construct($name = '',$type = 'image',$image = [])
{
$this->name = $name;
$this->type = $this->checkUpload($type);
$this->module = request()->app_name();
$this->image = $image;
$this->domain = Request()->domain();
}
protected $config = [
'image' => [
'validate' => [
'size' => 10*1024*1024,
'ext' => 'jpg,png,gif,jpeg',
],
'path' => '/images',
],
'audio' => [
'validate' => [
'size' => 100*1024*1024,
'ext' => 'mp3,wav,cd,ogg,wma,asf,rm,real,ape,midi',
],
'path' => '/audios',
],
'video' => [
'validate' => [
'size' => 100*1024*1024,
'ext' => 'mp4,avi,rmvb,rm,mpg,mpeg,wmv,mkv,flv',
],
'path' => '/videos',
],
'file' => [
'validate' => [
'size' => 5*1024*1024,
'ext' => 'doc,docx,xls,xlsx,pdf,ppt,txt,rar,zip,pem,p12',
],
'path' => '/files',
],
];
private function checkUpload($type){
try{
if(empty($_FILES) || empty($_FILES[$this->name])) throw new Exception("未上传文件!");
if(!in_array($type,array_keys($this->config))) throw new Exception("文件类型不存在!");
return $type;
}catch (Exception $e){
return \app\common\controller\Base::show(100,$e->getMessage());
}
}
public function upfile($infoSwitch = false){
$file = request()->file($this->name);
try{
if($file == null) throw new ValidateException("the file cannot be empty");
validate(['file' => self::validateFile()])->check(['file' => $file]);
$savename = \think\facade\Filesystem::disk('public')->putFile( $this->module.$this->config[$this->type]['path'], $file);
if($infoSwitch){
return self::getFileInfo($file,$savename);
}
return $savename;
}catch (\think\exception\ValidateException $e){
return \app\common\controller\Base::show(100,self::languageChange($e->getMessage()));
}
}
private function validateFile(){
if(empty($this->image)){
$validataType = [
'fileSize' => $this->config[$this->type]['validate']['size'],
'fileExt' => $this->config[$this->type]['validate']['ext'],
];
}else{
if(is_array($this->image)) throw new ValidateException("");
$validataType = [
'fileSize' => $this->config[$this->type]['validate']['size'],
'fileExt' => $this->config[$this->type]['validate']['ext'],
'image' => $this->image //示例值 [200,200]
];
}
return $validataType;
}
private function languageChange($msg){
$data = [
'the file cannot be empty' => '文件不能为空!',
'unknown upload error' => '未知上传错误!',
'file write error' => '文件写入失败!',
'upload temp dir not found' => '找不到临时文件夹!',
'no file to uploaded' => '没有文件被上传!',
'only the portion of file is uploaded' => '文件只有部分被上传!',
'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!',
'upload write error' => '文件上传保存错误!',
];
return $data[$msg] ?? $msg;
}
private function getFileInfo($file,$savename){
$info = [
'path' => config('filesystem.disks.public.url').'/'.str_replace('\\','/',$savename),
'url' => $this->domain.config('filesystem.disks.public.url').'/'.str_replace('\\','/',$savename),
'size' => $file->getSize(),
'name' => $file->getOriginalName(),
'mime' => $file->getMime(),
'ext' => $file->extension()
];
return $info;
}
}
> 使用方法 :
>
> $instanceUpload = new upload($fileName,$fileType);
> $info = $instanceUpload->upfile(true);
版权属于:
小破孩
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论