PHP Laravel 上传图片、文件等类封装

2021-07-13 10:30:10 浏览数 (1)

今天把项目中上传功能封装成类,方便后面使用,简单的封装了一下,感觉还不怎么好,后面继续优化。

具体代码如下:

<?php

/**

namespace AppThinkClass;

use SymfonyComponentHttpFoundationFileUploadedFile;

class UploadClass

{

/**

protected $file;

/**

private $error = ''; //上传错误信息

private $fullPath='';//绝对地址

private $config = array(

'maxSize' => 3

1024, //上传的文件大小限制 (0-不做限制)

'exts' => array('jpg','jpeg','gif','png','doc','docx','xls','xlsx','ppt','pptx','pdf','rar','zip'), //允许上传的文件后缀

'subName' => '', //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组

'rootPath' => '/uploads/', //保存根路径

'savePath' => '', //保存路径

'thumb' => array(),//是裁剪压缩比例

);

public function __construct($config = array()){

/

/

$this-&gt;config = array_merge($this->config, $config);

if(!emptyempty($this->config['exts'])){

if (is_string($this->exts)){

$this-&gt;config['exts'] = explode(',', $this->exts);

}

$this-&gt;config['exts'] = array_map('strtolower', $this->exts);

}

$this-&gt;config['subName'] = $this->subName ? ltrim($this->subName,'/') : '/'.date('Ymd');

$this-&gt;fullPath = rtrim(public_path(),'/').$this->config['rootPath'];

}

public function __get($name) {

return $this-&gt;config[$name];

}

public function __set($name,$value){

if(isset($this-&gt;config[$name])) {

$this-&gt;config[$name] = $value;

}

}

public function __isset($name){

return isset($this-&gt;config[$name]);

}

/**

public function getError(){

return $this->error;

}

public function upload($fi/

/le){

if(emptyempty($file)){

$this->error = '没有上传的文件';

return false;

}

if(!$this-&gt;checkRootPath($this->fullPath)){

$this-&gt;error = $this->getError();

return false;

}

$fileSavePath=$this->fullPath.$this-&gt;savePath.$this->subName;

if(!$this-&gt;checkSavePath($fileSavePath)){

$this-&gt;error = $this->getError();

return false;

}

$files =array();

if(!is_array($file)){

//如果不是数组转成数组

$files[]=$file;

}else{

$files=$file;

}

$info = array();

$imgThumb = new AppThinkClassThumbClass();

foreach ($files as $key=>$f){

$this-&gt;file=$f;

$f-&gt;ext = strtolower($f->getClientOriginalExtension());

/

/

if (!$this-&gt;check($f)){

continue;

}

$fileName = str_random(12).'.'.$f->ext;

/

/

if ($this-&gt;file-&gt;move($fileSavePath,$fileName)) {

/

/

Log::notice($fileSavePath.$fileName);

if(!emptyempty($this-&gt;thumb) &amp;&amp; is_array($this->thumb)){

$imgThumb -&gt;thumb($this->thumb,$fileSavePath.'/'.$fileName);

}

$info[]=$this->rootPath.$this-&gt;savePath.$this->subName.'/'.$fileName;

}

}

return is_array($info) &#63; $info : false;

}

/**

protected function checkRootPath($rootpath){

if(!(is_dir($rootpath) &amp;&amp; is_writable($rootpath))){

$this->error = '上传根目录不存在!';

return false;

}

return true;

}

/**

public function checkSavePath($savepath){

/

/

if (!$this-&gt;mkdir($savepath )) {

return false;

} else {

/

/

if (!is_writable($savepath)) {

$this->error = '上传目录不可写!';

return false;

} else {

return true;

}

}

}

/**

private function check($file) {

/

/

if (!$this-&gt;checkSize($file->getSize())) {

$this->error = '上传文件大小不符!';

return false;

}

/

/

if (!$this-&gt;checkExt($file->ext)) {

$this->error = '上传文件后缀不允许';

return false;

}

/

/

return true;

}

/**

private function checkSize($size) {

return !($size &gt; $this->maxSize) || (0 == $this->maxSize);

}

/**

private function checkExt($ext) {

return emptyempty($this-&gt;config['exts']) &#63; true : in_array(strtolower($ext), $this->exts);

}

/**

protected function mkdir($savepath){

if(is_dir($savepath)){

return true;

}

if(mkdir($savepath, 0777, true)){

return true;

} else {

$this->error = "目录创建失败";

return false;

}

}

}

使用案例:

头部引用  use AppThinkClassUploadClass; 

$upload = new UploadClass();

$upload->exts=array('jpg','png');

$upload->maxSize=5

1024;

$upload->savePath='course/uid_6';

$file = $request->file('fileImg');

$aa = $upload->upload($file);

dd($aa);

以上所述是小编给大家介绍的PHP Laravel 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

/

/

0 人点赞