• 技术文章 >后端开发 >php教程

    thinkphp实现图片上传功能分享_PHP教程

    2016-07-13 10:37:07原创377
    1.我们首先需要创建一个表

    复制代码 代码如下:

    CREATE TABLE IF NOT EXISTS `tp_image` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `image` varchar(200) NOT NULL,
    `create_time` int(11) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    2.然后再conf文件里添加配置(最后一段配置是可选的,只是为了方便统一管理URL路径)

    复制代码 代码如下:

    return array(
    'URL_MODEL' => 2, // 如果你的环境不支持PATHINFO 请设置为3
    'DB_TYPE' => 'mysql',
    'DB_HOST' => 'localhost',
    'DB_NAME' => 'thinkphp',
    'DB_USER' => 'root',
    'DB_PWD' => '',
    'DB_PORT' => '3306',
    'DB_PREFIX' => 'tp_',

    'SHOW_PAGE_TRACE' =>true, //显示页面调试明细

    'TMPL_PARSE_STRING' => array( // 地址替换,用_UPLOAD_目录 代替 根目录下的Upload目录
    '__UPLOAD__' => __ROOT__.'/Uploads',
    ),
    );
    ?>

    3.添加一个Image模块(名字可以随便取)

    复制代码 代码如下:

    class ImageAction extends Action{

    /**
    * 创建index 入口方法
    */
    public function index(){
    $image=M('Image');
    $data=$image->order('create_time desc')->find(); //获取最后上传图片
    $this->assign('data',$data);
    $this->display();
    }
    ?>

    4.创建相应index视图文件(index.html)

    复制代码 代码如下:





    Insert title here



    上传允许文件类型:gif png jpg 图像文件,并生成2张缩略图,其中大图带水印,生成后会删除原图。









    5.选择图片,点击上传按钮后,会跳到Image模块的upload方法上,Image模块上现在还没有这个方法,于是我们创建它

    复制代码 代码如下:

    class ImageAction extends Action{

    /**
    * 创建index 入口方法
    */
    public function index(){
    $image=M('Image');
    $data=$image->order('create_time desc')->find(); //获取最后上传图片

    var_dump($data);
    $this->assign('data',$data);
    $this->display();
    }

    //如果上传的文件不为空,跳转到_upload方法
    public function upload(){
    //如果不为空
    if(!empty($_FILES))
    {
    $this->_upload();
    }

    }

    6.如果提交的不是NULL,则跳到_upload方法上,此方法实现图片上传的功能

    复制代码 代码如下:

    class ImageAction extends Action{

    /**
    * 创建index 入口方法
    */
    public function index(){
    $image=M('Image');
    $data=$image->order('create_time desc')->find(); //获取最后上传图片

    var_dump($data);
    $this->assign('data',$data);
    $this->display();
    }


    //如果上传的文件不为空,跳转到_upload方法
    public function upload(){
    //如果不为空
    if(!empty($_FILES))
    {
    $this->_upload();
    }

    }


    /***
    * 实现图片上传
    */
    public function _upload(){
    import('@.ORG.UploadFile');
    //导入上传类
    $upload = new UploadFile();
    //设置上传文件大小
    $upload->maxSize = 3292200;
    //设置上传文件类型
    $upload->allowExts = explode(',', 'jpg,gif,png,jpeg');
    //设置附件上传目录
    $upload->savePath = './Uploads/';
    //设置需要生成缩略图,仅对图像文件有效
    $upload->thumb = true;
    // 设置引用图片类库包路径
    $upload->imageClassPath = '@.ORG.Image';
    //设置需要生成缩略图的文件后缀
    $upload->thumbPrefix = 'm_,s_'; //生产2张缩略图
    //设置缩略图最大宽度
    $upload->thumbMaxWidth = '400,100';
    //设置缩略图最大高度
    $upload->thumbMaxHeight = '400,100';
    //设置上传文件规则
    $upload->saveRule = 'uniqid';
    //删除原图
    $upload->thumbRemoveOrigin = true;


    //如果上传不成功
    if (!$upload->upload())
    {
    //捕获上传异常
    $this->error($upload->getErrorMsg());
    }
    else
    {
    //取得成功上传的文件信息
    $uploadList = $upload->getUploadFileInfo();


    //导入图片类
    import('@.ORG.Image');

    //给m_缩略图添加水印, Image::water('原文件路径','水印图片地址')
    Image::water($uploadList[0]['savepath'] . 'm_' . $uploadList[0]['savename'], APP_PATH.'Tpl/Public/Images/logo.png');

    //图片名赋值给 字段image
    $_POST['image'] = $uploadList[0]['savename'];
    }
    $model = M('image');
    //保存当前数据对象
    $data['image'] = $_POST['image'];
    $data['create_time'] = NOW_TIME;
    $list = $model->add($data);
    if ($list !== false)
    {
    $this->success('上传图片成功!');
    }
    else
    {
    $this->error('上传图片失败!');
    }
    }
    }
    ?>

    上传成功生成两张缩略图

    需要说明的是:

    ThinkPHP里自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php),要完整版的ThinkPHP包才有。

    没有的话需要在Lib里创建一个文件夹(ORG),然后去官网下载扩展包把这两个文件放到ORG文件夹中。

    我的是第二种情况

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/736807.htmlTechArticle1.我们首先需要创建一个表 复制代码 代码如下: CREATE TABLE IF NOT EXISTS `tp_image` ( `id` int(11) NOT NULL AUTO_INCREMENT, `image` varchar(200) NOT NULL, `create_...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:thinkphp 图片上传
    上一篇:php网页标题中文乱码的有效解决方法_PHP教程 下一篇:使用php清除bom示例_PHP教程
    Web大前端开发直播班

    相关文章推荐

    • PHP session有效期有关问题• 两台linux服务器下配置的ftp关于图片上传的有关问题• php 伪静态 大家帮帮小弟我• 跟大家请问一个关于php+mysql字符编码有关问题,多谢 • 新手 cookie登陆有关问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网