ThinkPHP新添加了3.1版本的图片上传示例。
新版的上传类内部做了一些调整,实例化的参数也有所改变,目的是为了更加明确化。
ThinkPHP示例之图片上传,包括图片上传、数据库保存、缩略图生成以及图片水印功能演示。
首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置。
导入示例目录下面的data.sql文件到你的数据库,或者执行SQL:
CREATE&">nbsp;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;
修改App/Conf/config.php 中的数据库配置信息,访问
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->thumbMaxW
idth = '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']; }
由于独立演示的方便,示例中的文件上传类和图片类放置于项目类库目录下面的ORG目录,实际应用中,这两个类库应该在扩展目录中,根据实际情况调整import方法即可。
在输出图片的时候,为了方便调整,我们定义了模板输出替换:
'TMPL_PARSE_STRING' =>
array( '/Uploads'=>__ROOT__.'/Uploads', ),
所以,我们只需要在模板文件中写上
<img src="/Uploads/m_{$data.image}" />
输出的时候会自动把/Uploads替换成__ROOT__.'/Uploads',也就是示例目录下面的Uploads目录。