基于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在Web开发领域的优势
Oct 09 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
php堆排序(heapsort)练习
Nov 13 PHP
php三维数组去重(示例代码)
Nov 26 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
php算法实例分享
Jul 14 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
php htmlentities()函数的定义和用法
May 13 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
laravel框架创建授权策略实例分析
Nov 22 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判断所处服务器操作系统的类型
2013/06/20 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现ip查询示例
2014/03/26 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python3实现Web网页图片下载
2016/01/28 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
Python argparse模块应用实例解析
2019/11/15 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
教师自荐书
2013/10/08 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
国际贸易求职信
2014/07/05 职场文书
项目申请汇报材料
2014/08/16 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
sql注入教程之类型以及提交注入
2021/08/02 MySQL