blogpro

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目录。
更多关于文件上传的操作可以参考在线手册的文件上传

分类:

技术点:

相关文章: