知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

thinkphp实现UploadFile.class.php图片上传功能

发布时间:2014-09-05 10:13:20作者:知识屋

图片上传在网站里是很常用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.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路径)

复制代码代码如下:
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模块(名字可以随便取)

复制代码代码如下:
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)

复制代码代码如下:




Insert title here



上传允许文件类型:gif png jpg 图像文件,并生成2张缩略图,其中大图带水印,生成后会删除原图。


%20
%20%20%20%20
%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20
%20%20%20%20


5.选择图片,点击上传按钮后,会跳到Image模块的upload方法上,Image模块上现在还没有这个方法,于是我们创建它

复制代码代码如下:
%20%20%20%20class%20ImageAction%20extends%20Action{%20%20%20%20%20%20%20%20

%20%20%20%20%20%20%20%20/**
%20%20%20%20%20%20%20%20%20*%20创建index%20入口方法
%20%20%20%20%20%20%20%20%20*/
%20%20%20%20%20%20%20%20public%20function%20index(){
%20%20%20%20%20%20%20%20%20%20%20%20$image=M('Image');%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20$data=$image->order('create_time%20desc')->find();%20%20%20%20//获取最后上传图片

%20%20%20%20%20%20%20%20%20%20%20%20var_dump($data);
%20%20%20%20%20%20%20%20%20%20%20%20$this->assign('data',$data);
%20%20%20%20%20%20%20%20%20%20%20%20$this->display();
%20%20%20%20%20%20%20%20}%20

%20%20%20%20%20%20%20%20//如果上传的文件不为空,跳转到_upload方法
%20%20%20%20%20%20%20%20public%20function%20upload(){%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20//如果不为空
%20%20%20%20%20%20%20%20%20%20%20%20if(!empty($_FILES))
%20%20%20%20%20%20%20%20%20%20%20%20{
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20$this->_upload();
%20%20%20%20%20%20%20%20%20%20%20%20}

%20%20%20%20%20%20%20%20}

6.如果提交的不是NULL,则跳到_upload方法上,此方法实现图片上传的功能

复制代码代码如下:
%20%20%20%20class%20ImageAction%20extends%20Action{%20%20%20%20%20%20%20%20

%20%20%20%20%20%20%20%20/**
%20%20%20%20%20%20%20%20%20*%20创建index%20入口方法
%20%20%20%20%20%20%20%20%20*/
%20%20%20%20%20%20%20%20public%20function%20index(){
%20%20%20%20%20%20%20%20%20%20%20%20$image=M('Image');%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20$data=$image->order('create_time%20desc')->find();%20%20%20%20//获取最后上传图片

%20%20%20%20%20%20%20%20%20%20%20%20var_dump($data);
%20%20%20%20%20%20%20%20%20%20%20%20$this->assign('data',$data);
%20%20%20%20%20%20%20%20%20%20%20%20$this->display();
%20%20%20%20%20%20%20%20}%20

%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20//如果上传的文件不为空,跳转到_upload方法
%20%20%20%20%20%20%20%20public%20function%20upload(){%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20//如果不为空
%20%20%20%20%20%20%20%20%20%20%20%20if(!empty($_FILES))
%20%20%20%20%20%20%20%20%20%20%20%20{
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20$this->_upload();
%20%20%20%20%20%20%20%20%20%20%20%20}

%20%20%20%20%20%20%20%20}

%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20/***
%20%20%20%20%20%20%20%20%20*%20实现图片上传
%20%20%20%20%20%20%20%20%20*/
%20%20%20%20%20%20%20%20public%20function%20_upload(){
%20%20%20%20%20%20%20%20%20%20%20%20import('@.ORG.UploadFile');
%20%20%20%20%20%20%20%20%20%20%20%20//导入上传类
%20%20%20%20%20%20%20%20%20%20%20%20$upload%20=%20new%20UploadFile();
%20%20%20%20%20%20%20%20%20%20%20%20//设置上传文件大小
%20%20%20%20%20%20%20%20%20%20%20%20$upload->maxSize%20%20%20%20%20%20%20%20%20%20%20%20=%203292200;
%20%20%20%20%20%20%20%20%20%20%20%20//设置上传文件类型
%20%20%20%20%20%20%20%20%20%20%20%20$upload->allowExts%20%20%20%20%20%20%20%20%20%20=%20explode(',',%20'jpg,gif,png,jpeg');
%20%20%20%20%20%20%20%20%20%20%20%20//设置附件上传目录
%20%20%20%20%20%20%20%20%20%20%20%20$upload->savePath%20%20%20%20%20%20%20%20%20%20%20=%20'./Uploads/';
%20%20%20%20%20%20%20%20%20%20%20%20//设置需要生成缩略图,仅对图像文件有效
%20%20%20%20%20%20%20%20%20%20%20%20$upload->thumb%20%20%20%20%20%20%20%20%20%20%20%20%20%20=%20true;
%20%20%20%20%20%20%20%20%20%20%20%20//%20设置引用图片类库包路径
%20%20%20%20%20%20%20%20%20%20%20%20$upload->imageClassPath%20%20%20%20%20=%20'@.ORG.Image';
%20%20%20%20%20%20%20%20%20%20%20%20//设置需要生成缩略图的文件后缀
%20%20%20%20%20%20%20%20%20%20%20%20$upload->thumbPrefix%20%20%20%20%20%20%20%20=%20'm_,s_';%20%20//生产2张缩略图
%20%20%20%20%20%20%20%20%20%20%20%20//设置缩略图最大宽度
%20%20%20%20%20%20%20%20%20%20%20%20$upload->thumbMaxWidth%20%20%20%20%20%20=%20'400,100';
%20%20%20%20%20%20%20%20%20%20%20%20//设置缩略图最大高度
%20%20%20%20%20%20%20%20%20%20%20%20$upload->thumbMaxHeight%20%20%20%20%20=%20'400,100';
%20%20%20%20%20%20%20%20%20%20%20%20//设置上传文件规则
%20%20%20%20%20%20%20%20%20%20%20%20$upload->saveRule%20%20%20%20%20%20%20%20%20%20%20=%20'uniqid';
%20%20%20%20%20%20%20%20%20%20%20%20//删除原图
%20%20%20%20%20%20%20%20%20%20%20%20$upload->thumbRemoveOrigin%20%20=%20true;

%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20//如果上传不成功
%20%20%20%20%20%20%20%20%20%20%20%20if%20(!$upload->upload())%20
%20%20%20%20%20%20%20%20%20%20%20%20{
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//捕获上传异常
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20$this->error($upload->getErrorMsg());
%20%20%20%20%20%20%20%20%20%20%20%20}%20
%20%20%20%20%20%20%20%20%20%20%20%20else%20
%20%20%20%20%20%20%20%20%20%20%20%20{
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//取得成功上传的文件信息
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20$uploadList%20=%20$upload->getUploadFileInfo();

%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//导入图片类
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20import('@.ORG.Image');%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20

%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//给m_缩略图添加水印,%20Image::water('原文件路径','水印图片地址')
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Image::water($uploadList[0]['savepath']%20.%20'm_'%20.%20$uploadList[0]['savename'],%20APP_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文件夹中。

我的是第二种情况


(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜