前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP Laravel 上传图片、文件等类封装

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

作者头像
用户8449980
修改2021-07-13 10:30:10
2.1K0
修改2021-07-13 10:30:10
举报
文章被收录于专栏:编程学习园地编程学习园地

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

具体代码如下:

<?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 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

/

/

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档