CI 框架没有直接提供批量上传的接口,但是我们稍微修改一下上传接口
$this->load->library('upload', $config);
$this->upload->do_upload('upload_file');
,也能实现批量上传文件。其它框架的批量上传文件原理也大概如此。
首页,下面是html 代码 文件是一个数组 ,form 标签 添加 enctype="multipart/form-data"
<html>
<head>
<title></title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post">
标题<input type="text" name="title"/> </br>
描述<input type="text" name="description"/> </br>
<input type="file" name="image[]" multiple="multiple" /></br>
<input type="submit" value="提交">
</form>
</body>
</html>
在upload 方法应该这么处理
public function upload(){
// var_dump(json_encode($_FILES));
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 1024*2;
$config['max_width'] = 0;
$config['max_height'] = 0;
$config['overwrite'] = TRUE ;
//创建下载目录
if(!file_exists($config['upload_path'])){
mkdir($config['upload_path'], 0777, true);
}
$this->load->library('upload', $config);
$fileArr = $_FILES['image'];
if(count($_FILES['image']['name']) == 0){
echo '请上传图片'; exit;
}
$file = array();
foreach ($fileArr['name'] as $key => $value) {
$file['name'] = $value;
$file['type'] = $fileArr['type'][$key];
$file['tmp_name'] = $fileArr['tmp_name'][$key];
$file['error'] = $fileArr['error'][$key];
$file['size'] = $fileArr['size'][$key];
$_FILES = array('image'=>$file);
if ( ! $this->upload->do_upload('image')){
$error = $this->upload->display_errors();
var_dump($error); exit;
}
}
echo '上传成功';
}
当批量上传文件时, $_FILES 的格式是:
也是说, name, type ,都是数组,而CI框架的 $this->upload->do_upload('image') 只支持 字符。
所以我们要转换一下 $_FILES 转换成
。然后foreach 循环上传就OK了。如果有不懂,可以一起交流