zoukankan      html  css  js  c++  java
  • ThinkPHP示例:图片上传

    ThinkPHP示例之图片上传,包括图片上传、数据库保存、缩略图生成以及图片水印功能演示。
    首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置。
    导入示例目录下面的data.sql文件到你的数据库,或者执行SQL:

    CREATE TABLE IF NOT EXISTS `think_photo` (
      `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;
    View Code
     

    修改App/Conf/config.php 中的数据库配置信息,访问

    1. http://localhost/file/
    复制代码

    就会显示:

    选择一个图片上传成功后,页面会出现:

    生成的大图缩略图右下角带有水印图片。
    示例中上传操作的关键方法是IndexAction类的_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');
        $_POST['image'] = $uploadList[0]['savename'];
    }
    View Code
    复制代码

    由于独立演示的方便,示例中的文件上传类和图片类放置于项目类库目录下面的ORG目录,实际应用中,这两个类库应该在扩展目录中,根据实际情况调整import方法即可。
    在输出图片的时候,为了方便调整,我们定义了模板输出替换:

    'TMPL_PARSE_STRING' =>array(
        '/Uploads'=>.'/Uploads',
    ),
    View Code
     

    所以,我们只需要在模板文件中写上

    1. <img src=" uploads="" m_{$data.image}" ="">
    复制代码

    输出的时候会自动把/Uploads替换成.'/Uploads',也就是示例目录下面的Uploads目录。
    更多关于文件上传的操作可以参考在线手册的文件上传

  • 相关阅读:
    腾讯课堂目标2017高中数学联赛基础班-2作业题解答-1
    腾讯课堂目标2017初中数学联赛集训队作业题解答-1
    2016猿辅导初中数学竞赛基础特训营作业题
    Markdown的基本语法
    解决网络图片加载出现403错误
    深入理解JS引擎的执行机制
    vue中moment.js的使用
    js中字符串 stringObject 的 replace() 方法
    Object.keys()方法
    webpack的require.context()实现路由“去中心化”管理
  • 原文地址:https://www.cnblogs.com/blogpro/p/11340256.html
Copyright © 2011-2022 走看看