基于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 缓存函数代码
Aug 27 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
基础的WordPress插件制作教程
Nov 24 PHP
php构造函数与析构函数
Apr 23 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
JavaScript 事件系统
2010/07/22 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
js获取视频时长代码
2014/04/10 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python 实现视频 图像帧提取
2019/12/10 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
班子个人四风问题整改措施
2014/10/04 职场文书
融资合作协议书范本
2014/10/17 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2014年民警工作总结
2014/11/25 职场文书
新教师个人工作总结
2015/02/06 职场文书
幼儿园辞职信范文
2015/02/27 职场文书