工作需要,整理一下最近對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); } }
既可以成功的操作了。不足之處,請大家指正。