您的位置:首页 > Web前端 > JavaScript

一个文件上传的类

2004-10-27 16:31 309 查看
APACHE2+PHP5~~

代码如下:

<?php

////附件上传类

class upload_other extends sys_function
{
 ////声明
 var $upfile_type,$upfile;
 var $d_alt,$extention_list;
 var $datetime,$date;
 var $filestr,$size,$ext;
 var $flash_directory,$extention,$file_path; 

function upload_other()
{
 ////构造函数
 $this->set_extention();
 $this->set_size(50);
 $this->set_date();
 $this->set_datetime();
 $this->set_flash_directory("attachmentFile");
}

////文件类型
function set_file_type($upfile_type)
{
 $this->upfile_type = $upfile_type;
}

////获得文件名
function set_file_name($upfile_name)
{
 $this->upfile_name = $upfile_name;
}

////获得文件
function set_upfile($upfile)
{
 $this->upfile = $upfile;
}

////获得文件大小
function set_file_size($upfile_size)
{
 $this->upfile_size = $upfile_size;
}

////获得文件说明
function set_d_alt($d_alt)
{
 $this->d_alt = $d_alt;
}

////获得文件扩展名
function get_extention()
{
 $this->extention = substr($this->upfile_name,-4);
}  

////设置文件名称
function set_datetime()
{
 $this->datetime = date("YmdHis");
}

////设置目录名称
function set_date()
{
 $this->date = date("Y-m-d");
}

////初始化允许上传文件类型
function set_extention()
{
 $this->extention_list = ".doc|.xls|.ppt|.avi|.txt|.gif|.jpg|.jpeg|.bmp|.png";
}  

////设置最大上传KB限制
function set_size($size)
{
 $this->size = $size;
}

////初始化文件存储目录
function set_flash_directory($directory)
{
 $this->flash_directory = $directory."/".$this->date;
}

////如果目录没有创建则创建文件存储目录
function mk_dir()
{
 if (! file_exists($this->flash_directory)){
  @mkdir($this->flash_directory,0777);
 }
}  

////以数组的形式获得分解后的允许上传的文件类型
function get_compare_extention()
{
 $this->ext = explode("|",$this->extention_list);
}

////检测扩展名是否违规
function check_extention()
{
 for($i=0;each($this->ext);$i++)
 {
  if($this->ext[$i] == strtolower($this->extention))
  {
   $this->check = true;
   break;
  }
 }
 if(! $this->check){$this->showerror("正确的扩展名必须为".$this->extention_list."其中的一种!");}
}

////检测文件大小是否超标
function check_size()
{
 if($this->upfile_size > round($this->size*1024))
 {
  $this->showerror("上传附件不得超过".$this->size."KB");
 }
}

////文件完整路径及文件名称连接
function set_file_path()
{
 $this->file_path = $this->flash_directory."/".$this->datetime.$this->extention;
}

////文件信息
function join_string()
{
 $this->filestr  = $this->file_path."*".$this->d_alt;
}

////上传文件
function copy_file()
{
 if(copy($this->upfile,$this->file_path)){
  print "<script language=javascript>returnvar1('".$this->filestr."');</script>";
 }else {
  print $this->showerror("上传失败,请重试!");
 }
}

////完成保存
function save()
{
 $this->get_extention();
 $this->check_size();
 $this->get_compare_extention();
 $this->check_extention();
 $this->mk_dir();
 $this->set_file_path();
 $this->join_string();
 $this->copy_file();
}

}

?>

继承了sys_function类一个函数,如下:
function showerror($errstr="未知错误!")
{
  echo "<script language=javascript>alert('$errstr');location='javascript:history.go(-1);';</script>";
  exit();
}
用法如下:

///引用并创建对象

<?php

include("../../class/const.php");
include("../../class/upload_other.php");
$f_upload = new upload_other;

?>

////调用
<?php

$f_upload->set_file_type($_FILES['src']['type']);
$f_upload->set_file_name($_FILES['src']['name']);
$f_upload->set_file_size($_FILES['src']['size']);
$f_upload->set_upfile($_FILES['src']['tmp_name']);
$f_upload->set_d_alt($f_upload->post_data("d_alt"));
$f_upload->set_size(100);
$f_upload->save(); 

?>

表单如下:
<script language="javascript">
function check()
{
  if (myform.src.value == '')
  {
    window.alert("文件不能为空!");
    document.myform.src.focus();
    return false;
  }

  if (myform.d_alt.value == '')
  {
    window.alert("说明文字不能为空!");
    document.myform.d_alt.focus();
    return false;
  }
  return true;
}
</SCRIPT>
<form action="" method="post" enctype="multipart/form-data" name="myform" onSubmit="return check()">
<TABLE border=0 cellPadding=3 cellSpacing=4 width=100%>
  <TBODY>
  <TR>
    <TD width=70 nowrap>附件来源:</TD>
    <TD><input name="src" type="file" id="src"><font color="#FF0000">注:上传的文件名称最好不要包含中文字,即为英文或数字,以免发生不能正常下载情况。</font></TD>
  </TR>
  <TR>
    <TD valign="top" nowrap>附件说明文字:</TD>
    <TD colSpan=2><input name="d_alt" type=text id=d_alt style="width:243px" value="" size=68>(可填写附件文档的标题)</TD>
  </TR>
  <TR>
    <TD> </TD>
    <TD colSpan=2><input type="submit" name="Submit" value="提交"><input type="reset" name="Submit2" value="重写"></TD>
  </TR>
  <TR>
    <TD> </TD>
    <TD colSpan=2><font color="#FF0000">注:如果附件文件比较大,请您耐心等待,文件上传可能需要较长时间!</font></TD>
  </TR>
</TABLE>
</form>
print "<script language=javascript>returnvar1('".$this->filestr."');</script>";

该句用到了一个js函数~由于偶使用了编辑器,所以才用到,如果用不到编辑器的话可以修改为上传成功!

改进:
////设置文件名称
function set_datetime()
{
 $this->datetime = date("YmdHis");
}

////设置目录名称
function set_date()
{
 $this->date = date("Y-m-d");
}
这个最好可以让用户自己设置

function get_extention()
{
 $this->extention = substr($this->upfile_name,-4);
}

扩展名不一定是3个字符的

function get_extention()
{
 $tmp=explode(".",$this->upfile_name);
 $arri=count($tmp);
 $this->extention =$tmp[$arri-1];
}

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息