wordpress CMS主题 微信
Home > PHP开发 > ThinkPHP框架:上传图片(文件)功能

ThinkPHP框架:上传图片(文件)功能

高时银博客 PHP开发 点击: 1,438 次 0 0

前面我们介绍过ThinkPHP框架生成缩略图,本章我们再来看看ThinkPHP如何上传图片(文件)。同生成缩略图功能一样,ThinkPHP 的文件上传功能同样提供了一个上传类,即 Upload.class.php,这个类的位置在在thinkphp/library/think文件夹下。ThinkPHP上传类可以提供单个文件上传、多个文件上传等上传方式。下面就一起来看看。

ThinkPHP上传的默认文件夹是 :系统根目录下的 Uploads 文件夹,需创建。

1、前台表单:

//上传单个文件的表单模式
<form action="__CONTROLLER__/upload" enctype="multipart/form-data" method="post">
<input type="file" name="photo" />
<input type="submit" value="提交" />
</form>

这里的 __CONTROLLER__/upload 是控制器方法。

//多文件上传设置,或者改为 photo1,photo2,photo3 即可
<input type="file" name="photo[]" />
<input type="file" name="photo[]" />
<input type="file" name="photo[]" />

2、上传处理:在控制器端对上传的数据进行处理。

//命名空间
namespace Admin\Controller;
use Think\Controller;
use Think\Upload;
class UserController extends Controller {
public function upload(){
$upload = new Upload();//实例上传对象
$upload->maxSize = 3500000;//限制大小
$upload->savePath = "./"; //上传路径
$upload->exts = array("jpg","jpeg","gif","png"); //可以上传的文件后缀
$info = $upload->upload(); //执行对象的上传方法
if($info){
$this->success("上传成功。");  //成功函数
}else{
$this->error($upload->getError()); //错误提示
}
}
}

ThinkPHP上传处理 Upload 类的属性:

maxSize 最大文件大小(以字节为单位),0为不限大小
rootPath 保存的根路径
savePath 保存路径(相对于根路径)
saveName 保存规则,支持数组和字符串方式定义
saveExt 保存后缀,不设置的话使用原文件后缀
replace 存在同名文件是否是覆盖,默认为 false
exts 允许上传的文件后缀(留空为不限制),可数组或逗号分隔的字符串,默认为空
mimes 允许上传的文件类型(留空为不限制),可数组或逗号分隔的字符串,默认为空
autoSub 自动使用子目录保存上传文件,默认为 true
subName 子目录创建方式,采用数组或者字符串方式定义
hash 是否生成文件的 hash 编码 默认为 true
callback 检测文件是否存在回调,如果存在返回文件信息数组

//限制上传文件类型
$upload->mimes = array('image/jpeg');

//不设置子目录
$upload->autoSub = false;
//设置子目录格式
$upload->subName = array('date','Ymd');

//子目录采用函数返回
$upload->subName = 'get_user_id';
//在 function.php 中创建get_user_id这个函数
function get_user_id(){
return rand();
}

上传处理也可以以数组变量形式来设置:

$config = array(
"maxSize" => 3500000,
"savePath" => "./",
"exts" => array("jpg","jpeg","gif","png"),
);
$upload = new Upload($config);
$info = $upload->upload();
if($info){
$this->success("上传成功。");
}else{
$this->error($upload->getError());
}

3、获取上传图片的信息:

foreach ($info as $file) {
echo $file['savepath'].$file['savename'];
}

$file 数组可以使用的属性:

key 附件上传的表单名称
savepath 上传文件的保存路径
name 上传文件的原始名称
savename 上传文件的保存名称
size 上传文件的大小
type 上传文件的 MIME 类型
ext 上传文件的后缀类型
md5 上传文件的 md5哈希验证字符串 仅当 hash 设置开启后有效
sha1 上传文件的 sha1哈希验证字符串 仅当 hash 设置开启后有效

当 hash 没有开启时,md5和sha1加密就不会执行。

获取到上传图片的信息,我们就可以在前台页面调用显示这些上传了的图片了。通过ThinkPHP上传图片文件相经于原始的纯PHP上传图片的功能实现,是不是要简单的多?这就是框架的魅力所在,框架早就将这些常用功能集成了,我们只需要简单调用就可以轻松实现。


文章作者:高时银博客
本文地址:http://wanlimm.com/77201605205087.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

目前还没有评论。赶快来坐沙发吧。

发表评论