zoukankan      html  css  js  c++  java
  • thinkphp对文件的上传,删除,下载操作

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

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

  • 相关阅读:
    TFS二次开发-基线文件管理器(5)-源码文件的读取
    TFS二次开发-基线文件管理器(4)-标签的创建
    TFS二次开发-基线文件管理器(3)-源码文件的读取
    TFS二次开发-基线文件管理器(2)-TFS登录
    TFS二次开发-基线文件管理器(1)-设计
    学习实践:使用模式,原则实现一个C++自动化测试程序
    学习实践:使用模式,原则实现一个C++数据库访问类
    C++字符转换等常用方法
    sqlserver 创建 aspstate的方法
    双网卡只有一个能ping通的解决办法
  • 原文地址:https://www.cnblogs.com/invban/p/5028666.html
Copyright © 2011-2022 走看看