invban

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

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

分类:

技术点:

相关文章: