最近沉迷laravel的链式写法不能自拔,最近有个单子需要用到文件上传,于是为了以后考虑自写了一个操作类
默认配置下直接使用:
1 2
| $file = new fileClass(); $file->save($_FILES['file_demo']);
|
本来要做附件表的,这单子不值这功能,就没深度写了。这单做完再加上这功能。
支持外部修改 文件大小、格式限制、存储位置。由于深受laravel的链式思想茶毒,所以这些功能调用十分优雅。(偷笑)
1 2 3 4 5 6
| $file->size(2)->save($_FILES['file_demo']);
$file->size(5)->allow(['jpg','png'])->save($_FILES['file_demo']);
$file->path('img/')->save($_FILES['file_demo']);
|
具体方法在注释里已经说的很清楚了,可以自行拓展开发…
注:文中用dirname()来定位文件夹,如果用在自己的项目,请按自己的目录结构设置dirname()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
| <?php
class fileClass {
private $file = [];
private $file_path = '/upload/';
private $file_allow = ['jpg','png','bmp','jpeg','gif'];
private $file_size = 0.5;
private $file_log = false;
private $file_table = 'files';
public function __construct(){ if($this->file_log && $this->file_table != ""){ } }
private function checkType(){ $aryStr = explode('.' , $this->file['name']); $this->file['type'] = strtolower($aryStr[count($aryStr)-1]); if (in_array(strtolower($this->file['type']), $this->file_allow)) { return true; }else { return false; } }
public function size($max){ $this->file_size = $max; return $this; }
public function allow($type){ $this->file_allow = $type; return $this; }
public function path($path){ $this->file_path .= $path; if(!file_exists(dirname(dirname(__FILE__)).$this->file_path)){ mkdir(dirname(dirname(__FILE__)).$this->file_path); } return $this; }
public function save($files){ $this->file['name'] = $files['name']; $this->file['tmp_name'] = $files['tmp_name']; $this->file['size'] = $files['size']; $this->file['error'] = $files['error'];
$maxsize = $this->file_size * 1024 * 1024;
if($this->file['size'] > $maxsize){ return [ 'success' => false, 'error' => '错误:文件超过设置的最大容量' ]; }
if(!$this->checkType()){ return [ 'success' => false, 'error' => '错误:文件格式不支持' ]; }
$newName = md5(time().rand(1000,5000));
$url = $this->file_path.$newName.".".$this->file['type']; $path = dirname(dirname(__FILE__)).$url;
if (move_uploaded_file($this->file['tmp_name'], $path)) { return [ 'success' => true, 'url' => $url, ]; }else{ return [ 'success' => false, 'error' => '错误:上传文件时发生未知错误' ]; } } }
|