基于ThinkPHP5.0实现图片上传插件


Posted in PHP onSeptember 25, 2017

效果预览图:

基于ThinkPHP5.0实现图片上传插件

该插件主要功能是:可预览裁剪图片和保存原图片,执行裁剪图片后会删除 裁剪的原图片目录,以便减少空间。

一、下载附件

地址:链接: https://pan.baidu.com/s/1nuQ4NgP  密码: 4pbu

二、将附件中的CropAvatar.php放到自己程序目录extend/org目录下,如果遇到 exif_imagetype 错误,需要打开 php.ini 中的 extension=php_exif.dll

基于ThinkPHP5.0实现图片上传插件

三、common.php公共函数

找到应用程序目录下的common.php文件,在里面添加公用函数:

/**
 * 转换字节
 * @param $bytes 传入字节数值
 * @param int $decimals
 * @return string BKMGTP
 */
function human_filesize($bytes, $decimals = 2) {
 $sz = 'BKMGTP';
 $factor = floor((strlen($bytes) - 1) / 3);
 return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
}
/**
 * 删除该目录以及该目录下面的所有文件和文件夹
 * @param $dir 目录
 * @return bool
 */
function removeDir($dirName) {
 //判断传入参数是否目录,如不是执行删除文件
 if (!is_dir($dirName)) {
  //删除文件
  @unlink($dirName);
 }
 //如果传入是目录,使用@opendir将该目录打开,将返回的句柄赋值给$handle
 $handle = @opendir($dirName);
 //这里明确地测试返回值是否全等于(值和类型都相同)FALSE
 //否则任何目录项的名称求值为 FALSE 的都会导致循环停止(例如一个目录名为“0”)
 while (($file = @readdir($handle)) !== false) {
  //在文件结构中,都会包含形如“.”和“..”的向上结构
  //但是它们不是文件或者文件夹
  if ($file != '.' && $file != '..') {
   //当前文件$dir为文件目录+文件
   $dir = $dirName . '/' .$file;
   //判断$dir是否为目录,如果是目录则递归调用reMoveDir($dirName)函数
   //将其中的文件和目录都删除;如果不是目录,则删除该文件
   is_dir($dir) ? removeDir($dir) : @unlink($dir);
  }
 }
 closedir($handle);
 return rmdir($dirName);
}

四、修改配置文件

找到应用程序目录下的配置文件config.php,在配置里面添加:

//上传配置 根目录前需添加 一个 .
 'syc_images' => [
  //缩图保存位置
  'thumb' => './uploads/thumbs',
  //附件图片保存位置
  'image' => './uploads/images',
  //裁剪的原始图片保存位置
  'original' => './uploads/original',
  //上传限制 2*1024*1024
  'size' => 2097152,
 ],

五、将file-thumd-modal.html文件放到view文件夹里面,作为一个模板文件,如:

基于ThinkPHP5.0实现图片上传插件

六、控制器,附件中的Thumbs.php文件是一个示例控制器,可以将该控制器拿到你的程序目录下,修改下命名空间、方法名等,该控制器里面有个方法为:index(),该方法是上传文件调用的方法,如果想要显示一个选择文件的页面还需自己写个操作方法,如:test()。

public function test() {
  return $this->fetch();
 }
public function index() {
 .....
}

七、视图层,在view文件夹里定义一个与test方法相关的模板文件,该页面的<body>标签里面需要加上class="page-header-fixed",因为JS里面需要使用到。<a class="btn red btn-outline sbold avatar-view"> 选择图片</a>这个标签用来打开模态框,class为avatar-view,{include file="public/file-thumd-modal"}用来引入file-thumd-modal.html文件,需要找到该模板文件写地址。

<!DOCTYPE html>
//id="art-thumb" 返回的图片地址
//id="preview" 返回的 img 小图
//该页面需引入bootstrap的js,css和jquery等文件
<head>
 <script src="__STATIC__/dist/js/jquery-1.11.2.min.js"></script>
 <script src="__STATIC__/dist/js/bootstrap.min.js"></script>
 <link rel="stylesheet" href="__STATIC__/dist/css/bootstrap.min.css" rel="external nofollow" type="text/css" />
</head>
<body class="page-header-fixed">
 <img src="./public/uploads/thumbs/20170925/20170925135203666.png" />
  <div class="form-group">
  <label class="control-label col-md-2">浓缩图片</label>
   <div class="col-md-3"><input type="text" name="art_thumb" id="art-thumb" class="form-control"></div>
   <div class="col-md-2">
      {// 调用 avatar-view}
     <a class="btn red btn-outline sbold avatar-view"> 选择图片</a>
   </div>
   <div class="col-md-3"><div id="preview"></div></div>
  </div>
{// file-thumd-modal.html 可以引用到其他页面要用到的地方}
{// 引入上传图片modal}
{include file="public/file-thumd-modal"}
<script language="javascript" type="text/javascript">
 $(function () {
  var $imgDiv = $('.avatar-wrapper');
  $imgDiv.find('img').cropper({aspectRatio:NaN}); //设置自由裁剪, NaN 为自由裁剪,此为覆盖默认 1:1比例裁剪框
 })
</script>
</body>

做好这些步骤,我们就可以使用该插件了,其它的一些像:图片存放位置,图片返回路径等等,可以子在相应的文件里面进行修改即可。

总结

以上所述是小编给大家介绍的基于ThinkPHP5.0实现图片上传插件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
一个目录遍历函数
Oct 09 PHP
用PHP动态创建Flash动画
Oct 09 PHP
几个学习PHP的网址
Nov 25 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 #PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 #PHP
php mysql PDO 查询操作的实例详解
Sep 23 #PHP
PHP实现权限管理功能示例
Sep 22 #PHP
php生成毫秒时间戳的实例讲解
Sep 22 #PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 #PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 #PHP
You might like
动态生成gif格式的图像要注意?
2006/10/09 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
Javascript 继承实现例子
2009/08/12 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
JavaScript如何判断input数据类型
2020/02/06 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
python写的ARP攻击代码实例
2014/06/04 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
python3实现windows下同名进程监控
2018/06/21 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
主题班会演讲稿
2014/05/22 职场文书
语文教育专业求职信
2014/06/28 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
读书笔记格式
2015/07/02 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技