thinkphp對檔案的上傳,刪除,下載操作

木子小僧發表於2015-12-08

工作需要,整理一下最近對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); 
        }
    }

既可以成功的操作了。不足之處,請大家指正。

相關文章