工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人。
thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php
废话不多说,直接上真的。
源码分享地址:http://pan.baidu.com/s/1qXuMGGk
建立一个数据库:
username:上传者。
time:上传时间
size:文件大小。
path:路径。
filename:上传的文件名。
savename:上传后保存的加密文件名称。
对文件的上传,操作,先建立可视化界面。
如图:
视图代码不贴了,核心代码如下:
但是提交的form表单有一个是必须声明的:
<form action="" method="post" enctype="multipart/form-data">
public function addFile(){ $data[\'username\'] = I(\'name\'); $data[\'time\'] = time(); $config = array( \'maxSize\'=> 31457280, \'rootPath\' => \'./Static/\', \'savePath\'=>\'\', \'saveRule\'=>\'time\', \'allowExts\'=>\'array()\', ); $upload = new \Think\Upload($config); $info = $upload->upload(); if(!$info){ $this->error(\'添加失败......\',U(\'Upload/index\')); }else{ $imgurl = \'/Static/\'.$info[\'path\'][\'savepath\'].$info[\'path\'][\'savename\']; } $size = $info[\'path\'][\'size\']/1024; $data[\'path\'] = $imgurl; $data[\'size\'] = sprintf("%.2f", $size); $data[\'filename\'] = $info[\'path\'][\'name\']; $data[\'savename\'] = $info[\'path\'][\'savename\']; $obj = M(\'upload\'); $res = $obj->data($data)->add(); if($res){ $this->success(\'上传成功!!\',U(\'Upload/index\')); }else{ $this->error(\'上传失败!!\',U(\'Upload/index\')); } }
点击提交,文件即可上传成功。
另外是文件的删除了,记住一个方法就可以很好解决一个问题,就是unlink();
代码为:
//文件删除 public function delFile(){ $where[\'id\'] = I(\'id\'); $obj = M(\'upload\'); $list = $obj->where($where)->find(); if(empty($list)){ $this->error(\'文件不存在或者已经被删除\',U(\'Upload/fileList\')); }else{ $del = $obj->where($where)->delete(); $path = $_SERVER[\'DOCUMENT_ROOT\']."power".$list[\'path\'];//找到文件地址,echo即可 $res = unlink($path);//删除文件 if($res){ $this->success(\'文件成功删除!!\',U(\'Upload/fileList\')); }else{ $this->error(\'文件删除失败或者文件不存在!!\',U(\'Upload/fileList\')); } } }
更新文件操作:
//文件的更新,编辑操作 public function editFileController(){ $where[\'id\'] = I(\'id\'); $oldpath = $_SERVER[\'DOCUMENT_ROOT\']."power".I(\'oldpath\');//获取原文件存放地址 unlink($oldpath); //更新文件操作 $config = array(//配置上传文件信息 \'maxSize\'=> 31457280, \'rootPath\' => \'./Static/\', \'savePath\'=>\'\', \'saveRule\'=>\'time\', \'allowExts\'=>\'array()\', ); $upload = new \Think\Upload($config); $info = $upload->upload(); if(!$info){ $this->error(\'文件更新失败......\',U(\'Upload/index?$w here[id]\')); }else{ $imgurl = \'/Static/\'.$info[\'path\'][\'savepath\'].$info[\'path\'][\'savename\']; } //更新的数据 $data[\'username\'] = I(\'username\');//文件上传者 $data[\'time\'] = time();//文件更新日期 $data[\'path\'] = $imgurl;//文件路径 $data[\'filename\'] = $info[\'path\'][\'name\'];//文件名称 $obj = M(\'upload\'); $res = $obj->where($where)->data($data)->save(); if($res){ $this->success(\'更新成功。。。\',U(\'Upload/fileList\')); }else{ $this->error(\'更新失败。。。\',U(\'Upload/fileList\')); } }
下载文件操作:
//文件下载 public function downloadFile(){ $where[\'data\'] = I(\'id\'); $obj = M(\'upload\'); $list = $obj->where($where)->find(); if(empty($list)){ $this->success(\'文件不存在或者已经被删除\',U(\'Upload/fileList\')); }else{ $path = $_SERVER[\'DOCUMENT_ROOT\']."power".$list[\'path\'];//找到文件路径 $file_name = $list[\'filename\']; if(!file_exists($path)){ $this->error("文件不存在!",U(\'Upload/fileList\')); } $fp = fopen($path,\'r\'); $file_size=filesize($path); //下载文件需要用到的头 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length:".$file_size); Header("Content-Disposition: attachment; filename=".$file_name); $buffer=1024; $file_count=0; //向浏览器返回数据 while(!feof($fp) && $file_count<$file_size){ $file_con=fread($fp,$buffer); $file_count+=$buffer; echo $file_con; } fclose($fp); } }
既可以成功的操作了。不足之处,请大家指正。