基于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 相关文章推荐
PHP 高手之路(二)
Oct 09 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
浅谈PHP的反射机制
Dec 15 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
php实现微信支付之企业付款
2018/05/30 PHP
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
大学生社会实践评语
2014/04/25 职场文书
节能环保口号
2014/06/12 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
Js类的构建与继承案例详解
2021/09/15 Javascript