欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

ThinkPHP示例:图片上传

shiping1 的头像
ThinkPHP示例之图片上传,包括图片上传、数据库保存、缩略图生成以及图片水印功能演示。
首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置。
导入示例目录下面的data.sql文件到你的数据库,或者执行SQL:
  1. CREATE TABLE IF NOT EXISTS `think_photo` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `image` varchar(200) NOT NULL,
  4.   `create_time` int(11) NOT NULL,
  5.   PRIMARY KEY (`id`)
  6.  ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
复制代码
 
修改App/Conf/config.php 中的数据库配置信息,访问
  1. http://localhost/file/
复制代码
 
就会显示:

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

生成的大图缩略图右下角带有水印图片。
示例中上传操作的关键方法是IndexAction类的_upload方法,关键代码如下:
  1. import("@.ORG.UploadFile");
  2.  //导入上传类
  3. $upload = new UploadFile();
  4.  //设置上传文件大小
  5. $upload->maxSize = 3292200;
  6.  //设置上传文件类型
  7. $upload->allowExts = explode(',', 'jpg,gif,png,jpeg');
  8.  //设置附件上传目录
  9. $upload->savePath = './Uploads/';
  10.  //设置需要生成缩略图,仅对图像文件有效
  11. $upload->thumb = true;
  12.  // 设置引用图片类库包路径
  13. $upload->imageClassPath = '@.ORG.Image';
  14.  //设置需要生成缩略图的文件后缀
  15. $upload->thumbPrefix = 'm_,s_';  //生产2张缩略图
  16.  //设置缩略图最大宽度
  17. $upload->thumbMaxWidth = '400,100';
  18.  //设置缩略图最大高度
  19. $upload->thumbMaxHeight = '400,100';
  20.  //设置上传文件规则
  21. $upload->saveRule = 'uniqid';
  22.  //删除原图
  23. $upload->thumbRemoveOrigin = true;
  24.  if (!$upload->upload()) {
  25.     //捕获上传异常
  26.     $this->error($upload->getErrorMsg());
  27.  } else {
  28.     //取得成功上传的文件信息
  29.     $uploadList = $upload->getUploadFileInfo();
  30.     import("@.ORG.Image");
  31.     //给m_缩略图添加水印, Image::water('原文件名','水印图片地址')
  32.     Image::water($uploadList[0]['savepath'] . 'm_' . $uploadList[0]['savename'], APP_PATH.'Tpl/Public/Images/logo.png');
  33.     $_POST['image'] = $uploadList[0]['savename'];
  34.  }
复制代码
 
由于独立演示的方便,示例中的文件上传类和图片类放置于项目类库目录下面的ORG目录,实际应用中,这两个类库应该在扩展目录中,根据实际情况调整import方法即可。
在输出图片的时候,为了方便调整,我们定义了模板输出替换:
  1. 'TMPL_PARSE_STRING' =>array(
  2.     '/Uploads'=>.'/Uploads',
  3.  ),
复制代码
 
所以,我们只需要在模板文件中写上
  1.  >
复制代码
 
输出的时候会自动把/Uploads替换成.'/Uploads',也就是示例目录下面的Uploads目录。
更多关于文件上传的操作可以参考在线手册的文件上传
评论(36相关
guenli01月30日
非常感谢楼主的分享啊!
黑色柠檬12月02日
不适用3.2
lnfg10月31日
来学习学习,有用
daixu11010月05日
3.23 能行么
huxiaodan12080808月02日
Warning: require(../ThinkPHP/ThinkPHP.php): failed to open stream: No such file or directory in D:\xampps\htdocs\file\index.php on line 7
Fatal error: require(): Failed opening required '../ThinkPHP/ThinkPHP.php' (include_path='.;D:/xampps/htdocs') in D:\xampps\htdocs\file\index.php on line 7
回复huxiaodan12080808月02日
怎么解决?我想知道怎样把这个下载的Thinkphp框架直接放在Htdpc文件夹就可以了吗?我这样子做,结果出现以上的问题。求大神指导~~~~
Smallv07月16日
手机上传照片时有时候照片会变成横版是怎么回事 求解呀.....
回复聆听心跳11月27日
qqqqq
何宣辉07月06日
Fatal error: Call to undefined function imagecreatefrom() in /data/home/qxu1146250251/htdocs/fjadmin/Home/Lib/ORG/Image.class.php on line 72怎么解决?早上我还可以用的~
aa12aaa06月22日
我的数据库中有图片信息 怎么upload文件夹下没有图片呢
有子南来03月19日
这个是无刷新的么
Janyd2015年02月10日
Cannot redeclare class UploadFile这个是什么错误!求教~
回复55340618010月16日
我也抱着个错,跟框架本身的image函数重名了,系统加载时就会报错,我把系统的删掉了还是不行,换个名字还是一样的错
0c0c0f2015年01月29日
请问图片路径怎么出错到数据库呢?
五点生活2014年08月31日
今天没法下载。
yiyide2662014年08月23日
能不能按比例自动创建缩略图?例如我上传一张图尺寸为400*200,当我设缩略图的宽度为200时,高度相应变成100压缩,而不是像现在一样每张图都要设置长宽?感觉太不科学
oヤ炅2014年05月11日
怎么样控制 水印图片位置呢?
moonscu2014年01月22日
上传图片完成后,怎么能不跳转直接在页面上显示出图片呢?
回复布丁2014年09月10日
使用ajaxform异步上传图片
sara_org2013年12月27日
还以为是3.2版本的呢!!!
sima2013年12月11日
楼主分享的很不错,必须要赞,也分享下我的成果 http://www.hxfed.com
回复sara_org2013年12月27日
哥们,这样一网站做出来得花不少功夫,求经验分享!
回复wuqimeng2014年09月01日
我想知道,网站什么资源都没有。怎么会有一千多的IP来量。??
回复lcuzhanglei2015年01月16日
回复 wuqimeng : 被黑了吗?
天天向尚2013年11月04日
这个小图也会被拉伸成大图会变模糊,比如设置成400*400 ,我传个350*350的也会被拉伸成400*400的,能不能设置宽度和高度小于设置的宽和高就不变,还是按原来的大小保存
回复VJURONG2013年12月26日
他少设置东西 了
xp17002013年11月04日
代码在windows实现,为什么在linux下不成功呢?只是生成2个空jpg文件。求高手!!!
rqdmy02013年09月19日
不错
南屿无尘2013年08月13日
为什么出现这样的提示:上传目录$upload->savePath不存在
缘来2013年08月09日
http://www.thinkphp.cn/topic/4458.html 亲,帮忙解决下我这个图片上传的问题,谢谢啊。
停笔2013年07月23日
Call to undefined method Image::thumb2()
提示这个错误是什么原因thinkphp 
急急急.......
回复停笔2013年07月23日
找到原因了
回复xieguoen2013年09月06日
回复 停笔 : 同问,怎么解决的???
回复fsdlakjf2014年03月04日
回复 xieguoen : 类引用的问题
寂寞流星2013年07月18日
学习了,好好。
蓝精灵2013年06月07日
怎么样才能保存URL远程图片呢,云擎版BAE版将URL图片保存到BCS中
tp8933594632013年06月06日
UploadFile 中 找不到 class类
Class 'Image' not found
错误位置
FILE: D:\wamp\www\lz\ThinkPHP\Extend\Library\ORG\Net\UploadFile.class.php  LINE: 129
求科普
回复停笔2013年07月23日
应该将@.ORG.Image改成@.ORG.Util.Image
然后把ThinkPHP\Extend\Library\ORG\Util\Image.class.php复制一份到你的模目下Lib\ORG\Util\
ゝ海之帆ζ伟&静つ2013年06月04日
哪个大哥可以告诉小弟下,从两个数据库调数据完成二级联动中js部分代码怎么写
specs2013年06月02日
上传成功了,也加了水印,但是开启debug模式的时候,在上传成功的时候提示下面的信息:
[2] md5_file(./Uploads/51aac64c1683c.jpg) [<a href='function.md5-file'>function.md5-file</a>]: failed to open stream: No such file or directory 
这是怎么回事?
回复宁静小屋03月22日
请问你这个情况怎么解决?
kang_web2013年05月28日
有个问题,不知道是不是bug
我启用子目录保存文件后,存入数据库的文件名没有把缩略图前缀(或者后缀)加上,导致图片无法正确读取,比如我上传后的文件存放路径为2013/05/sr_1369733302.jpg,但实际存入数据库时的路径为2013/05/1369733302.jpg。在我看了下是在模板中读取的时候加前缀的,是不是哪里要进行修改?
回复thinkphp2013年05月28日
通常来说 缩略图不止一个 只要你的缩略图是有规范的 都可以封装方法来统一获取,所以数据库只是存储原图地址。当然,这个是看业务逻辑的 你完全可以更改的 数据库写入你自己可以控制的
alex_paul18402013年03月22日
首先我建了个FormAction.class.php在里面写上缩略图带码(就是ThinkPHP示例:图片上传_34行的那些),然后,把得到的缩略图地址传给视图模板upload.html,用img标签显示图片。
--------问题就出在这了
缩略图的地址均完好的传给img标签的src里了,可是他就是不给显示。
但我直接使用upload.html就可以正常显示图片。
---------求高手、官方给解决,,,,个人觉得是ThinkPHP的BUG
执笔、写下情2013年01月29日
无缩略图是怎么回事儿?
回复~上善若水~2013年05月18日
《》
cslatinwang2012年12月29日
可以上传,但是无水印,求解释?
m1992012年11月17日
上传gif图片,提交后空白,查看Uploads文件,GIF文件已上传成功,但无缩略图,也没水印,求解?
lcb212012年11月07日
我有一个问题。上传单个文件自己重命名只要在$upload->saveRule = 重命名; 这样就可以了,,可如果是上传多个图片怎么重命名呢。有办法吗?
i2eei2ee2012年10月10日
报错如下:
Notice: Constant APP_DEBUG already defined in D:\xampp\htdocs\thinkphp\ThinkPHP.php on line 18
是什么问题呀?
alex812012年09月19日
为什么新版的上传附件,无法限制文件类型了。
回复eterzhu2012年10月17日
私有属性访问有问题 需要增加个__isset()
回复thinkphp2012年10月29日
这个问题已经修正过的

普通分类: