thinkphp 文件上传

上传类使用ORG类库包中的Net.UpdateFile类,最新版本的上传类包含的功能如下(有些功能需要结合ThinkPHP系统其他类库)

比如如果要生成缩略图,还需要导入Image.class.php类。

 

1.基本上传功能

2.支持批量上传

3.支持生成图片缩略图

4. 自定义参数上传?

5.上传检测(包括大小、后缀和类型)

6.支持上传类型、附件大小、上传路径定义

7.支持哈希或者日期子目录保存上传文件

8.上传图片的安全性检测?

9.支持上传文件命名规则

10. 支持对上传文件的Hash验证? 这个帮忙解释一下,对上传文件的hash验证是什么?

注意表单的Form标签中一定要添加 enctype=”multipart/form-data” 文件才能上传。因为表单提交到当前模块的upload操作方法,所以我们在模块类里面添加下面的upload方法即可:

<?php
class FileAction extends Action{
function index(){
  $file=M('file');
  $list=$file->select();
  $this->assign('filelist',$list);
  $this->display();


function upload(){
  //文件上传地址提交给他,并且上传完成之后返回一个信息,让其写入数据库
  if(empty($_FILES)){
    $this->error('必须选择上传文件');
  }else{
    $a=$this->up();
    if(isset($a)){
      //写入数据库的自定义c方法
      if($this->c($a)){
        $this->success('上传成功');
      }
      else{
        $this->error('写入数据库失败');
      }
    }else{
      $this-error('上传文件异常,请与系统管理员联系');
    }
  }
}

private function c($data){
  $file=M('file');
  $num = '0';
  for($i = 0; $i < count($data)-1; $i++) {
    $data['filename']=$data[$i]['savename'];   
    if( $file->data($data)->add())
    {
      $num++;
    }
  }
  if($num==count($data)-1)
  {
    return true;
  }else
  {
    return false;
  }
 
}

private function up(){
  //完成与thinkphp相关的,文件上传类的调用
  import('@.Org.UploadFile');//将上传类UploadFile.class.php拷到Lib/Org文件夹下
  $upload=new UploadFile();
  $upload->maxSize='1000000';//默认为-1,不限制上传大小
  $upload->savePath='./Public/Upload/';//保存路径建议与主文件平级目录或者平级目录的子目录来保存
  $upload->saveRule=uniqid;//上传文件的文件名保存规则
  $upload->uploadReplace=true;//如果存在同名文件是否进行覆盖
  $upload->allowExts=array('jpg','jpeg','png','gif');//准许上传的文件类型
  $upload->allowTypes=array('image/png','image/jpg','image/jpeg','image/gif');//检测mime类型
  $upload->thumb=true;//是否开启图片文件缩略图
  $upload->thumbMaxWidth='300,500';
  $upload->thumbMaxHeight='200,400';
  $upload->thumbPrefix='s_,m_';//缩略图文件前缀   宽度、高度、还有前缀是一一对应的,还有后缀,但是后缀不经常用。
  $upload->thumbRemoveOrigin=1;//如果生成缩略图,是否删除原图
 
  if($upload->upload()){
    $info=$upload->getUploadFileInfo();//获取相关的上传文件信息
    return $info;
  }else{
    $this->error($upload->getErrorMsg());//专门用来获取上传的错误信息的
  }
}

}
?>

模板文件index.html

<html>

<body>

<volist name="filelist" id="vo">
小图:<img src="__PUBLIC__/upload/s_{$vo['filename']}" /><br />
大图:<img src="__PUBLIC__/upload/m_{$vo['filename']}" /><br />
</volist>

<form action="__URL__/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file[]" /><br />
<input type="file" name="file[]" /><br />
<input type="file" name="file[]" /><br />
<input type="submit" value="上传" />
</form>

</body>
</html>
实例化上传类之后,就可以设置一些上传的属性(参数),支持的属性有:

maxSize: 文件上传的最大文件大小(以字节为单位)默认为-1 不限大小

savePath:文件保存路径,如果留空会取UPLOAD_PATH常量定义的路径

saveRule:上传文件的保存规则,必须是一个无需任何参数的函数名,例如可以是 time、 uniqid com_create_guid 等,但必须能保证生成的文件名是唯一的,默认是uniqid

hashType:上传文件的哈希验证方法,默认是md5_file

autoCheck:是否自动检测附件,默认为自动检测

uploadReplace:存在同名文件是否是覆盖

allowExts:允许上传的文件后缀(留空为不限制),使用数组设置,默认为空数组

allowTypes:允许上传的文件类型(留空为不限制),使用数组设置,默认为空数组

thumb:是否需要对图片文件进行缩略图处理,默认为false

thumbMaxWidth:缩略图的最大宽度,多个使用逗号分隔

thumbMaxHeight:缩略图的最大高度,多个使用逗号分隔

thumbPrefix:缩略图的文件前缀,默认为thumb_   (如果你设置了多个缩略图大小的话,请在此设置多个前缀 )

thumbSuffix:缩略图的文件后缀,默认为空   (如果你设置了多个缩略图大小的话,请在此设置多个后缀 )

thumbPath:缩略图的保存路径,留空的话取文件上传目录本身

thumbFile:指定缩略图的文件名

thumbRemoveOrigin:生成缩略图后是否删除原图

autoSub:是否使用子目录保存上传文件

subType:子目录创建方式,默认为hash,可以设置为hash或者date

dateFormat:子目录方式为date的时候指定日期格式

hashLevel:子目录保存的层次,默认为一层

以上属性都可以直接设置,例如:

$upload->thumb = true
$upload->thumbMaxWidth = “50,200″
$upload->thumbMaxHeight = “50,200″
复制代码


 

其中生成缩略图功能需要Image类的支持。

设置好上传的参数后,就可以调用 UploadFile类的upload方法进行附件上传,如果失败,返回false,并且用getErrorMsg方法获取错误提示信息;如果上传成功, 可以通过调用getUploadFileInfo方法获取成功上传的附件信息列表。因此getUploadFileInfo方法的返回值是一个数组,其中 的每个元素就是上传的附件信息。每个附件信息又是一个记录了下面信息的数组,包括:

key:附件上传的表单名称

savepath:上传文件的保存路径

name:上传文件的原始名称

savename:上传文件的保存名称

size:上传文件的大小

type:上传文件的MIME类型

extension:上传文件的后缀类型

hash:上传文件的哈希验证字符串

文件上传成功后,就可以通过这些附件信息来进行其他的数据存取操作,例如保存到当前数据表或者单独的附件数据表都可以。

如果需要使用多个文件上传,只需要修改表单,把

XML/HTML代码
<input type=“file” name=“photo″>

XML/HTML代码
<input type=“file” name=“photo1″>
< input  type=“file”  name=“photo2″>
<input type=“file” name=“photo3″>

或者

PHP代码
<input type=“file”  name=“photo[]“ >    <input type=“file”  name=“photo[]“ >    <input type=“file”  name=“photo[]“ >  

两种方式的多附件上传系统的文件上传类都可以自动识别。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值