ThinkPHP3.1实现文件上传(支持多文件上传)

作者:袖梨 2022-06-25

上传表单
上传表单无需特别处理,下面是一个最简单的单文件上传表单:

 注意,表单必须添加enctype="multipart/form-data"属性才能支持文件上传功能。

 代码如下 复制代码





上传操作
接下来就是定义上传操作了,我们在Action控制器中添加upload操作方法如下:

要使用上传功能,首先第一步就是实例化上传类:

 代码如下 复制代码

import('ORG.Net.UploadFile');

$upload = new UploadFile();// 实例化上传类

//参数设置

//设置附件上传目录
$upload->savePath = './Uploads/';
//设置需要生成缩略图,仅对图像文件有效
$upload->thumb = true;
//设置需要生成缩略图的文件后缀
$upload->thumbPrefix = 'm_,s_';  //生产2张缩略图
//设置缩略图最大宽度
$upload->thumbMaxWidth = '200,50';
//设置缩略图最大高度
$upload->thumbMaxHeight = '200,50';

//文件上传代码

public function upload() {
    import('ORG.Net.UploadFile');
    $upload = new UploadFile();// 实例化上传类
    $upload->maxSize  = 3145728 ;// 设置附件上传大小
    $upload->allowExts  = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
    $upload->savePath =  './Public/Uploads/';// 设置附件上传目录
    if(!$upload->upload()) {// 上传错误提示错误信息
        $this->error($upload->getErrorMsg());
    }else{// 上传成功
        $this->success('上传成功!');
    }
}

注意只支持php文件哦,其它类型的文件会提示非法文件的。

上面讲到的是单文件上传,如果要多文件上传我们只要简单的对表单进行处理

多文件上传

表单如下写法

 代码如下 复制代码



或者像原生态php多文件上传的写法



php处理方法还是单文件上传的没什么变化

 代码如下 复制代码

import("ORG.Net.UploadFile");
$upload = new UploadFile();
foreach ($_FILES as $key=>$file){
    if(!empty($file['name'])) {
        $upload->autoSub = true;
        $upload->subType   =  'date';
        $info =  $upload->uploadOne($file);
        if($info){ // 保存附件信息
            M('Photo')->add($info);
        }else{ // 上传错误
            $this->error($upload->getErrorMsg());
        }
    }
}

最新版本的上传类包含的功能如下(有些功能需要结合ThinkPHP系统其他类库):
基本上传功能
支持批量上传
支持生成图片缩略图
自定义参数上传
上传检测(包括大小、后缀和类型)
支持覆盖方式上传
支持上传类型、附件大小、上传路径定义
支持哈希或者日期子目录保存上传文件
支持动态定义子目录保存文件
上传图片的安全性检测
支持上传文件命名规则
支持对上传文件的Hash验证

相关文章

精彩推荐