在CodeIgniter中,实现多文件上传功能可以通过修改控制器和视图文件来完成。下面是一个简单的多文件上传示例,包括控制器和视图的基本设置。
### 控制器 (`Upload.php`)
首先,确保你的CodeIgniter项目已经包含了文件上传库。然后,在控制器中创建一个方法来处理文件上传。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Upload extends CI_Controller {
public function index()
{
$this->load->view('upload_form'); // 加载上传表单视图
}
public function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
$filesCount = count($_FILES['userfile']['name']);
for ($i = 0; $i < $filesCount; $i++) {
$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];
$_FILES['userfile']['type'] = $_FILES['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $_FILES['userfile']['error'][$i];
$_FILES['userfile']['size'] = $_FILES['userfile']['size'][$i];
if ( ! $this->upload->do_upload('userfile')) {
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
} else {
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
}
}
**注意**:这里有一个潜在的问题,如果第一个文件上传失败,将直接显示错误并停止后续文件的上传。你可能需要调整逻辑以适应所有文件的上传情况,比如记录成功和失败的文件。
### 视图 (`upload_form.php`)
然后,创建一个表单视图来让用户选择文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Form</title>
</head>
<body>
<?php echo form_open_multipart('upload/do_upload');?>
<input type="file" name="userfile[]" multiple="multiple">
<input type="submit" value="upload" />
</form>
</body>
</html>
注意,`name="userfile[]"` 使用了方括号,这使得表单能够处理多文件输入。
### 视图 (`upload_success.php`)
最后,创建一个视图来显示上传成功的文件信息(这里只是一个简单的示例,你可能需要根据实际需要进行调整)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Success</title>
</head>
<body>
<h2>File Uploaded Successfully</h2>
<ul>
<?php foreach ($upload_data as $item => $value):?>
<li><?php echo ucfirst($item).': '.$value; ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
这个示例展示了如何在CodeIgniter中实现多文件上传的基本流程。请根据你的具体需求调整文件上传的配置和视图显示。