thinkphp达到UploadFile.class.php图片上传功能
1.我们首先须要创建一个表
CREATE TABLE IF NOT EXISTS `tp_image` (
`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;
2.然后再conf文件中加入配置(最后一段配置是可选的,仅仅是为了方便统一管理URL路径)
<?php
return array(
'URL_MODEL' => 2, // 假设你的环境不支持PATHINFO 请设置为3
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'thinkphp',
'DB_USER' => 'root',
'DB_PWD' => '',
'DB_PORT' => '3306',
'DB_PREFIX' => 'tp_',
'SHOW_PAGE_TRACE' =>true, //显示页面调试明细
'TMPL_PARSE_STRING' => array( // 地址替换,用_UPLOAD_文件夹 取代 根文件夹下的Upload文件夹
'__UPLOAD__' => __ROOT__.'/Uploads',
),
);
?>
3.加入一个Image模块(名字能够随便取)
<?php
class ImageAction extends Action{
/**
* 创建index 入口方法
*/
public function index(){
$image=M('Image');
$data=$image->order('create_time desc')->find(); //获取最后上传图片
$this->assign('data',$data);
$this->display();
}
?
>
4.创建对应index视图文件(index.html)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
#img{height:22px; border:#000 2px solid}
#button{height:30px; width:100px;}
</style>
</head>
<body>
<div class="result" >上传同意文件类型:gif png jpg 图像文件,并生成2张缩略图,当中大图带水印,生成后会删除原图。</div><br>
<notempty name="data"><img src="__UPLOAD__/m_{$data.image}" /> <img src="__UPLOAD__/s_{$data.image}" /></notempty>
<form action="__URL__/upload" method="post" enctype="multipart/form-data">
<input type="file" name="image" id="img"/>
<input type="submit" value="上传" id="button">
</form>
</body>
</html>
5.选择图片,点击上传button后,会跳到Image模块的upload方法上。Image模块上如今还没有这种方法,于是我们创建它
<?
php
class ImageAction extends Action{
/**
* 创建index 入口方法
*/
public function index(){
$image=M('Image');
$data=$image->order('create_time desc')->find(); //获取最后上传图片
var_dump($data);
$this->assign('data',$data);
$this->display();
}
//假设上传的文件不为空,跳转到_upload方法
public function upload(){
//假设不为空
if(!empty($_FILES))
{
$this->_upload();
}
}
6.假设提交的不是NULL,则跳到_upload方法上,此方法实现图片上传的功能
<?
php
class ImageAction extends Action{
/**
* 创建index 入口方法
*/
public function index(){
$image=M('Image');
$data=$image->order('create_time desc')->find(); //获取最后上传图片
var_dump($data);
$this->assign('data',$data);
$this->display();
}
//假设上传的文件不为空,跳转到_upload方法
public function upload(){
//假设不为空
if(!empty($_FILES))
{
$this->_upload();
}
}
/***
* 实现图片上传
*/
public function _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');
//图片名赋值给 字段image
$_POST['image'] = $uploadList[0]['savename'];
}
$model = M('image');
//保存当前数据对象
$data['image'] = $_POST['image'];
$data['create_time'] = NOW_TIME;
$list = $model->add($data);
if ($list !== false)
{
$this->success('上传图片成功!');
}
else
{
$this->error('上传图片失败!');
}
}
}
?>
上传成功生成两张缩略图
须要说明的是:
ThinkPHP里自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php),要完整版的ThinkPHP包才有。
没有的话须要在Lib里创建一个目录(ORG),然后去官网下载扩展包把这两个文件放到ORG目录中。
我是另一种情况
版权声明:本文博主原创文章,博客,未经同意,不得转载。
thinkphp达到UploadFile.class.php图片上传功能的更多相关文章
- H5 利用vue实现图片上传功能。
H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...
- 前端丨如何使用 tcb-js-sdk 实现图片上传功能
前言 tcb-js-sdk 让开发者可以在网页端使用 JavaScript 代码服务访问云开发的服务,以轻松构建自己的公众号页面或者独立的网站等 Web 服务.本文将以实现图片上传功能为例,介绍 tc ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...
- PHP语言学习之php做图片上传功能
本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...
- [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站
前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...
- 给DEDECMS广告管理中增加图片上传功能
dedecms的广告管理功能稍微有点次,本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自己的dedecms版本下载对应的编码然后解压把里面的文件放在后台目录覆盖即可 ...
- vue 图片上传功能
这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix"> ...
- thinkphp微信开发之jssdk图片上传并下载到本地服务器
public function test2(){ $Weixin = new \Weixin\Controller\BaseController(); $this->assign('signPa ...
- Thinkphp整合阿里云OSS图片上传实例
Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...
随机推荐
- OC-Protocol实现业务代理
创建一个Protocol,相当于java的接口,但,有些方法不必实现,例如以下 #import <Foundation/Foundation.h> @protocol MyProtocol ...
- 同步github工程gitcafe
github固然好.仅仅是国内訪问有点慢. 为了提高博客訪问速度我决定把github上托管的博客同步到gitcafe上.最好能在DNS那里做CDN,可是貌似没有免费的服务.那直接指向gitcafe好了 ...
- WampServer:轻松配置Wordpress安装环境
WordPress运行环境 PHP 5.2.4 或更新版本(不支持第三方推出的“PHP 6.0”) MySQL 5.0 或更新版本 Apache mod_rewrite 模块(可选,用于支持“固定链接 ...
- 关于identifier was truncated to '255' characters
学习c++过程中,遇到在VC中使用set时DEBUG模式出现的警告 identifier was truncated to '255' characters in the debug informat ...
- js实现的侧边栏展开收缩效果
原文地址:http://www.softwhy.com/forum.php?mod=viewthread&tid=12246 <!DOCTYPE html> <html> ...
- 关于java mail 发邮件的问题总结(转)
今天项目中有需要用到java mail发送邮件的功能,在网上找到相关代码,代码如下: import java.io.IOException; import java.util.Properties; ...
- Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)
阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...
- POJ 2536 Gopher II(二分图的最大匹配)
题目链接:http://poj.org/problem?id=2536 题意:已知有n仅仅老鼠的坐标,m个洞的坐标,老鼠的移动速度为V,S秒以后有一仅仅老鹰要吃老鼠,问有多少个老鼠被吃. 非常明晰,二 ...
- Qt之QComboBox(基本应用、代理设置)
QComboBox下来列表比较常用,用户可以通过选择不同的选项来实现不同的操作,如何实现自己的下拉列表呢? 很多人在问QComboBox如何设置选项的高度.代理等一些问题!今天就在此分享一下自己的一些 ...
- C#的c/s做出开灯关灯计算?
static void light(Boolean[] lights,int n) { if (n <= 1 || lights.Length<5) return; for ...