基于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 相关文章推荐
使用 MySQL 开始 PHP 会话
Dec 21 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
php实现加减法验证码代码
Feb 14 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
php之readdir函数用法实例
Nov 13 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
针对PHP开发安全问题的相关总结
Mar 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获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
js重写方法的简单实现
2016/07/10 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
pycharm显示远程图片的实现
2019/11/04 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
土木工程毕业生自荐信
2013/11/12 职场文书
党委书记岗位职责
2013/11/24 职场文书
财务会计自荐信范文
2014/02/21 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript