首页 > Php > ThinkPHP 之 文件上传类 UploadFile.class.php 的使用方法

ThinkPHP 之 文件上传类 UploadFile.class.php 的使用方法

ThinkPHP的文件上传类UploadFile.class.php位于ThinkPHPLibORGNet文件内下,其对于文件上传的处理非常的强大和方便。内置的文件上传类UploadFile类提供了下面的功能:

1、上传检测

2、多文件上传

3、自动生成上传图片缩略图

4、支持覆盖方式上传

5、支持上传类型、附件大小、上传路径定义

6、采用IFrame方式的Ajax上传机制支持

7、支持上传文件命名规则

8、支持对上传文件的Hash规则

9、可设置是否保存附件数据到数据库

在上传表单中可以进行很多参数的设置对上传进行灵活的定义,Action类的_upload方法会自动进行相关处理。
要更好的理解上传保存操作,可以参考ThinkPHP的附件数据表结构,更加详细下面的UploadFile类的参数和使用方法可以参考文件上传类的使用。

首先不要忘记对提交表单的form添加enctype=”multipart/form-data”,否则,是无法上传文件的。

<FORM METHOD=POST enctype="multipart/form-data" ACTION="__URL__/insert">
<TABLE>
<TR>
<TD align="right">用户名:</TD>
<TD><INPUT TYPE="text" NAME="name"></TD>
</TR>
<TR>
<TD align="right">密码:</TD>
<TD><INPUT TYPE="password" name="password"></TD>
</TR>
<TR>
<TD align="right">昵称:</TD>
<TD><INPUT TYPE="text" NAME="nickname"></TD>
</TR>
<TR>
<TD align="right">邮箱:</TD>
<TD><INPUT TYPE="text" NAME="email"></TD>
</TR>
<TR>
<TD align="right">头像:</TD>
<TD><INPUT TYPE="file"  name="photo" ></TD>
</TR>
<TR>
<TD align="right"></TD>
<TD><INPUT TYPE="submit" value="注册"></TD>
</TR>
</TABLE>
</FORM>

这里的头像input的name填写可以随意,只要不和其他input冲突就可以,ThinkPHP自己就会检测到的。除非当有多个文件一起上传,并且需要良好的对应关系时,再注意下。
现在,通过以下代码,即可实现保存表单,并保存相应的图片信息。

$usersM = M('user');

$result = $usersM->create();

if ( $result ) {
	if ( empty($result['id']) ) {
		unset($result['id']);
		$return = $usersM ->add($result);
		$id = $return;

	}else {
		$id = $result['id'];
		$return = $usersM ->where( array('id'=>$id) )->save($result);
	}
	if ( $return ) {
		import("ORG.Net.UploadFile");
		$upload = new UploadFile();//实例化上传类
		$upload->maxSize  = 3145728 ; // 设置附件上传大小
		$upload->allowExts  = array('jpg', 'gif', 'png', 'jpeg');//设置上传类型限制
		$upload->savePath =  './Public/Upload/Pics/'; //设置上传路径限制
		$upload->saveRule = time();//保存文件的命名规则,这里以时间戳为文件名
		$result = $upload->upload();//保存上传文件,获取上传信息
		if( !$result ) {
			if ( $upload->getErrorMsg() != '没有选择上传文件') {//这个判断是用户不上传头像时不报错,通过。
				 $this->error($upload->getErrorMsg());
			}				   
		}else {
			$uploadList = $upload->getUploadFileInfo();//获取上传文件成功后的结果
			$savename = $uploadList[0]['savename'];//获取保存的文件名
			$result = $usersM ->where( array('id'=>$id) )->save( array('user_avatar' => $savename ));//更新头像对应的文件名
			if ( !$result ) {
				$this->error($usersM ->getLastSql());
			}					
		}
		
		$this->success('保存成功!');
		
	}else {
		$this->error('插入数据时出错,请重试。'.$usersM ->getLastSql());
	}
}else {
	$this->error('数据有误,请重试');
}
  1. 匿名 3月 26th, 2012 @ 22:27 | #1

    0

评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks