• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > PHP开发 > ThinkPHP框架:上传图片(文件)功能

    ThinkPHP框架:上传图片(文件)功能

    作者: 分类:PHP开发 点击: 4,898 次
    wordpress CMS主题:ssmay主题

      前面我们介绍过ThinkPHP框架生成缩略图,本章我们再来看看ThinkPHP如何上传图片(文件)。同生成缩略图功能一样,ThinkPHP 的文件上传功能同样提供了一个上传类,即 Upload.class.php,这个类的位置在在thinkphp/library/think文件夹下。ThinkPHP上传类可以提供单个文件上传、多个文件上传等上传方式。下面就一起来看看。

      ThinkPHP上传的默认文件夹是 :系统根目录下的 Uploads 文件夹,需创建。

      1、前台表单:

      //上传单个文件的表单模式
      <form action="__CONTROLLER__/upload" enctype="multipart/form-data" method="post">
      <input type="file" name="photo" />
      <input type="submit" value="提交" />
      </form>

      这里的 __CONTROLLER__/upload 是控制器方法。

      //多文件上传设置,或者改为 photo1,photo2,photo3 即可
      <input type="file" name="photo[]" />
      <input type="file" name="photo[]" />
      <input type="file" name="photo[]" />

      2、上传处理:在控制器端对上传的数据进行处理。

      //命名空间
      namespace Admin\Controller;
      use Think\Controller;
      use Think\Upload;
      class UserController extends Controller {
      public function upload(){
      $upload = new Upload();//实例上传对象
      $upload->maxSize = 3500000;//限制大小
      $upload->savePath = "./"; //上传路径
      $upload->exts = array("jpg","jpeg","gif","png"); //可以上传的文件后缀
      $info = $upload->upload(); //执行对象的上传方法
      if($info){
      $this->success("上传成功。");  //成功函数
      }else{
      $this->error($upload->getError()); //错误提示
      }
      }
      }

      ThinkPHP上传处理 Upload 类的属性:

      maxSize 最大文件大小(以字节为单位),0为不限大小
      rootPath 保存的根路径
      savePath 保存路径(相对于根路径)
      saveName 保存规则,支持数组和字符串方式定义
      saveExt 保存后缀,不设置的话使用原文件后缀
      replace 存在同名文件是否是覆盖,默认为 false
      exts 允许上传的文件后缀(留空为不限制),可数组或逗号分隔的字符串,默认为空
      mimes 允许上传的文件类型(留空为不限制),可数组或逗号分隔的字符串,默认为空
      autoSub 自动使用子目录保存上传文件,默认为 true
      subName 子目录创建方式,采用数组或者字符串方式定义
      hash 是否生成文件的 hash 编码 默认为 true
      callback 检测文件是否存在回调,如果存在返回文件信息数组

      //限制上传文件类型
      $upload->mimes = array('image/jpeg');

      //不设置子目录
      $upload->autoSub = false;
      //设置子目录格式
      $upload->subName = array('date','Ymd');

      //子目录采用函数返回
      $upload->subName = 'get_user_id';
      //在 function.php 中创建get_user_id这个函数
      function get_user_id(){
      return rand();
      }

      上传处理也可以以数组变量形式来设置:

      $config = array(
      "maxSize" => 3500000,
      "savePath" => "./",
      "exts" => array("jpg","jpeg","gif","png"),
      );
      $upload = new Upload($config);
      $info = $upload->upload();
      if($info){
      $this->success("上传成功。");
      }else{
      $this->error($upload->getError());
      }

      3、获取上传图片的信息:

      foreach ($info as $file) {
      echo $file['savepath'].$file['savename'];
      }

      $file 数组可以使用的属性:

      key 附件上传的表单名称
      savepath 上传文件的保存路径
      name 上传文件的原始名称
      savename 上传文件的保存名称
      size 上传文件的大小
      type 上传文件的 MIME 类型
      ext 上传文件的后缀类型
      md5 上传文件的 md5哈希验证字符串 仅当 hash 设置开启后有效
      sha1 上传文件的 sha1哈希验证字符串 仅当 hash 设置开启后有效

      当 hash 没有开启时,md5和sha1加密就不会执行。

      获取到上传图片的信息,我们就可以在前台页面调用显示这些上传了的图片了。通过ThinkPHP上传图片文件相经于原始的纯PHP上传图片的功能实现,是不是要简单的多?这就是框架的魅力所在,框架早就将这些常用功能集成了,我们只需要简单调用就可以轻松实现。



      QQ二维码

    文章作者:高时银博客
    本文地址:http://wanlimm.com/77201605205087.html
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    This site uses Akismet to reduce spam. Learn how your comment data is processed.