首页 > PHP开发 > ThinkPHP框架:上传图片(文件)功能

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

作者: 分类:PHP开发 点击: 4,160 次
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上传图片的功能实现,是不是要简单的多?这就是框架的魅力所在,框架早就将这些常用功能集成了,我们只需要简单调用就可以轻松实现。

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

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

或许你会感兴趣的文章:

发表评论

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

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