thinkphp3.2实现上传图片的控制器方法


Posted in PHP onApril 28, 2016

本文讲述了thinkphp3.2实现上传图片的控制器方法。分享给大家供大家参考,具体如下:

public function file()
{
  $baseUrl = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
  import('ORG.Net.UploadFile');
  import('ORG.Util.Services_JSON');
  $upload = new UploadFile();
  $upload->maxSize = 3145728;
  $upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');
  $upload->savePath = './uploads/Images/';
  $info = $upload->uploadOne($_FILES['imgFile']);
  $file_url = $baseUrl . 'uploads/Images/' . $info['0']['savename'];
  if ($info) {
   header('Content-type: text/html; charset=UTF-8');
   $json = new Services_JSON();
   echo $json->encode(array('error' => 0, 'url' => $file_url));
   exit;
  } else {
   $this->error($upload->getErrorMsg());
  }
}
public function file_manager()
{
  import('ORG.Util.Services_JSON');
  $php_path = dirname(__FILE__) . '/';
  $php_url = dirname($_SERVER['PHP_SELF']) . '/';
  $root_path = $php_path . './uploads/Images/';
  $root_url = $php_url . './uploads/Images/';
  $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
  $dir_name = emptyempty($_GET['dir']) ? '' : trim($_GET['dir']);
  if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
   echo "Invalid Directory name.";
   exit;
  }
  if ($dir_name !== '') {
   $root_path .= $dir_name . "/";
   $root_url .= $dir_name . "/";
   if (!file_exists($root_path)) {
    mkdir($root_path);
   }
  }
//根据path参数,设置各路径和URL
  if (emptyempty($_GET['path'])) {
   $current_path = realpath($root_path) . '/';
   $current_url = $root_url;
   $current_dir_path = '';
   $moveup_dir_path = '';
  } else {
   $current_path = realpath($root_path) . '/' . $_GET['path'];
   $current_url = $root_url . $_GET['path'];
   $current_dir_path = $_GET['path'];
   $moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
  }
  echo realpath($root_path);
//排序形式,name or size or type
  $order = emptyempty($_GET['order']) ? 'name' : strtolower($_GET['order']);
//不允许使用..移动到上一级目录
  if (preg_match('/\.\./', $current_path)) {
   echo 'Access is not allowed.';
   exit;
  }
//最后一个字符不是/
  if (!preg_match('/\/$/', $current_path)) {
   echo 'Parameter is not valid.';
   exit;
  }
//目录不存在或不是目录
  if (!file_exists($current_path) || !is_dir($current_path)) {
   echo 'Directory does not exist.';
   exit;
  }
//遍历目录取得文件信息
  $file_list = array();
  if ($handle = opendir($current_path)) {
   $i = 0;
   while (false !== ($filename = readdir($handle))) {
    if ($filename{0} == '.') continue;
    $file = $current_path . $filename;
    if (is_dir($file)) {
     $file_list[$i]['is_dir'] = true; //是否文件夹
     $file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
     $file_list[$i]['filesize'] = 0; //文件大小
     $file_list[$i]['is_photo'] = false; //是否图片
     $file_list[$i]['filetype'] = ''; //文件类别,用扩展名判断
    } else {
     $file_list[$i]['is_dir'] = false;
     $file_list[$i]['has_file'] = false;
     $file_list[$i]['filesize'] = filesize($file);
     $file_list[$i]['dir_path'] = '';
     $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
     $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
     $file_list[$i]['filetype'] = $file_ext;
    }
    $file_list[$i]['filename'] = $filename; //文件名,包含扩展名
    $file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
    $i++;
   }
   closedir($handle);
  }
//排序
  usort($file_list, 'cmp_func');
  $result = array();
//相对于根目录的上一级目录
  $result['moveup_dir_path'] = $moveup_dir_path;
//相对于根目录的当前目录
  $result['current_dir_path'] = $current_dir_path;
//当前目录的URL
  $result['current_url'] = $current_url;
//文件数
  $result['total_count'] = count($file_list);
//文件列表数组
  $result['file_list'] = $file_list;
//输出JSON字符串
  header('Content-type: application/json; charset=UTF-8');
  $json = new Services_JSON();
  echo $json->encode($result);
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP安装攻略:常见问题解答(三)
Oct 09 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
PHP5.3新特性小结
Feb 14 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
PHP文件操作详解
Dec 30 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
Laravel框架集合用法实例浅析
May 14 PHP
PHP简单实现文本计数器的方法
Apr 28 #PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 #PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 #PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 #PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 #PHP
Composer设置忽略版本匹配的方法
Apr 27 #PHP
抛弃 PHP 代价太高
Apr 26 #PHP
You might like
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
sae使用smarty模板的方法
2013/12/17 PHP
php curl_init函数用法
2014/01/31 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android