一个基于SP的文件上传扩展

#1 prince

用法:
       把这些动作放到SP的控制器里边,要用的时候调用就行。
       新手写的,并且参考了网上的资料,给有跟我一样需要的人参考,也欢迎完善。请大家多指教(跟帖即可)
function UploadPic(){//显示文件上传网页界面
        $this -> cp_id = $_GET["cp_id"];
        $this -> display("upimg2.html");
        }
        
     function pictureSave(){//用于保存文件及把文件名保存到数据库
        $upPath = '../img/user/'.$_SESSION[username].'/';//上传路径,$_SESSION[username]为用户名(因为我存文件是按用户目录存的,这里根据自己需要修改是否需要这样就行了)
        if ($_FILES["file"]["error"] > 0){//如果文件出错
            return   $_FILES["file"]["error"];//返回文件出错信息
        }else{//否则进行文件操作及记录文件名到数据库
            $file = fopen($_FILES["file"]["tmp_name"], "rb");//以只读模式打开文件
            $bin = fread($file, 2); //只读取前2字节
            fclose($file);
            $strInfo = @unpack("C2chars", $bin);
            $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
            $type_r = $this -> file_judge($typeCode);//用file_judge()判断文件是否为指定文件类型并获取文件扩展名
            if ($type_r[0] == true){//如果文件合法则进行以下操作
                move_uploaded_file($_FILES["file"]["tmp_name"] , $upPath.date("Y-m-d_His").$type_r[1]);//移动临时文件到指定目录下的指定文件名
                $picture = date("Y-m-d_His") . $type_r[1];//设置保存的文件名
                $cplist_album = spClass("cplist_album");//这里是model
                $newPic = array('cp_id' => $this -> spArgs('cp_id'),'picture' => $picture,'picDesc' => $this -> spArgs('picDesc'));//设置要记录的字段及值
                $cplist_album -> create($newPic);//写数据库
                if ($cplist_album == false){//如果记录到数据库失败,则提示并跳转回上传页面
                    $msg = '上传图片时记录到数据库出错,请向系统管理员报告此问题!';
                    $url = spUrl("add_new","UploadPic",'cp_id='.$this -> spArgs('cp_id'));//这里是构造跳转URL
                    $this -> error($msg,$url);//开始跳转
                    }
                    else{//如果记录到数据库成功则做如下操作
                        $msg = '上传图片成功';//提示信息
                        $url = spUrl("add_new","UploadPic".'&cp_id='.$this -> spArgs('cp_id'));//跳转回上传页
                        $this -> success($msg,$url);//开始跳转
                        }
                }
                else{//如果文件类型非指定类型
                    //return false;
                    echo 'You want to upload files is lawlessness file.';
                    exit;
                }
          }
        }
    //file_judge()判断文件是否是指定类型,如果合法则以数组类型返回true和扩展名
    function file_judge($typeValue){
        switch ($typeValue){
            case 255216://这个是jpg类型
              $typeArray = array(true , '.jpg');
              return $typeArray;
              break;
            case 7173:
              $typeArray = array(true , '.gif');
              return $typeArray;
              break;
            case 13780:
              $typeArray = array(true , '.png');
              return $typeArray;
              break;
            default:
              return $typeArray = array(false,'');//默认返回false和空
            }

    }
下面是表单:







2010-11-13 19:19:42

#2 jake

:handshake
这是一个很值得参考的示例!

2010-11-14 12:00:47

#3 prince

回复 2 jake


    谢谢老大认可:$

2010-11-14 14:30:30

#4 chaoyinshu

upimg2.html这个文件是表单文件吗

2010-12-06 16:53:14

#5 coolcool1265

还好吧,鼓励一下。

我在写bmp格式文件处理的时候,不知道为什么,总是出错,好郁闷。

2010-12-06 22:14:21

#6 prince

回复 5 coolcool1265


    这个示例只提供了gif/jpg/png三种格式的文件头代码,其余的google下吧,如果文件头代码对了再检查下文件大小有没有超过服务器限制

2010-12-08 15:10:55

#7 citywill

这个应该写到扩展里

2010-12-08 15:27:41

#8 prince

这个只算一个示例,放哪里看自己喜好吧

2010-12-09 11:48:38