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

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

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

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

就会显示:

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

生成的大图缩略图右下角带有水印图片。
示例中上传操作的关键方法是IndexAction类的_upload方法,关键代码如下:

import("@.ORG.UploadFile");
//导入上传类
$upload = new UploadFile();
//设置上传文件大小
$upload->maxSize = ;
//设置上传文件类型
$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[]['savepath'] . 'm_' . $uploadList[]['savename'], APP_PATH.'Tpl/Public/Images/logo.png');
$_POST['image'] = $uploadList[]['savename'];
}
复制代码

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

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

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

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

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

最新文章

  1. 2003-Can&#39;t connect to mysql server on localhost (10061)
  2. docker学习(4) 一些常用操作
  3. SQL语言增加、修改、删除数据的语法
  4. Volley 实现原理解析(转)
  5. c# ref关键字对于引用类型传递的影响
  6. SQL Server性能优化(4)命名和书写规范
  7. SQL Server 修改排序规则
  8. 安卓天天练练(三)常用组件Toast
  9. 【开源java游戏框架libgdx专题】-12-开发工具-图片合成
  10. 常用的shell命令整理
  11. SQL点滴6—“微软不认识闰年2月29日”&amp;字符&quot;N&quot;的作用
  12. ASP.NET AJAX 创建类
  13. 条件随机场CRF(一)从随机场到线性链条件随机场
  14. Python操作excel表格
  15. 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号
  16. JS 禁用鼠标右键
  17. 多个for循环嵌套会影响速度
  18. 012-docker-安装-fabric:1.4
  19. MATLAB:保存mat文件
  20. angular学习笔记(一)-入门案例

热门文章

  1. LUOGU P4609 [FJOI2016]建筑师(第一类斯特林数)
  2. RHEL/CentOS通用性能优化、安全配置参考
  3. 前端每日实战:19# 视频演示如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
  4. php使用curl实现get和post请求的方法,数据传输urldecode和json
  5. VB.NET导出Excel 轻松实现Excel的服务器与客户端交换 服务器不安装Office
  6. handler消息机制入门
  7. JVM调优(二)——基于JVisualVM的可视化监控
  8. Centos7从零开始】Centos 下硬盘分区的最佳方案
  9. Asp.Net Core 第03局:Startup
  10. 3.tensorflow——NN