首页 > 编程 > PHP > 正文

thinkphp实现图片上传功能分享

2020-03-22 18:28:30
字体:
来源:转载
供稿:网友
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
html' target='_blank'>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 上传允许文件类型: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.选择图片,点击上传按钮后,会跳到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文件夹中。我的是第二种情况PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表