基于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基础学习笔记
Mar 18 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
php插件Xajax使用方法详解
Aug 31 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
浅析PHP7 的垃圾回收机制
Sep 06 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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基于单例模式编写PDO类的方法
2016/09/13 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
Python版名片管理系统
2018/11/30 Python
python读取几个G的csv文件方法
2019/01/07 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
jupyter 添加不同内核的操作
2021/02/06 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
调查研究项目计划书
2014/04/29 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
2014年档案室工作总结
2014/12/01 职场文书
致运动员的广播稿
2015/08/19 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL