CodeIgniter同一表单多文件不同配置上传问题求助
解决CodeIgniter多文件上传不同配置的问题
我明白你遇到的问题啦——表单里有两个文件上传字段,想给PDF文件分别设置不同的上传配置,但现在只有第一个配置生效。你提到的$this->upload->initialize()方法确实是正确的方向,但你的代码顺序有点问题,导致配置没有被正确应用到第二个文件上。
问题出在哪?
你现在的代码是先调用initialize(),再加载Upload库,这会导致初始化的配置被加载库时的默认配置(或者你传入的$siup)覆盖。而且你没有对第二个文件字段单独做配置和上传处理,自然只会按第一个配置来保存。
正确的实现步骤
- 先加载Upload库(可以在控制器构造函数里提前加载,或者在方法里先加载一次)
- 为第一个文件字段配置参数并初始化,然后执行上传
- 为第二个文件字段设置新的配置参数,重新初始化,再执行上传
- 分别处理两个上传的结果,判断是否成功,收集错误信息
完整代码示例
假设你的两个文件上传字段分别是siup_file和izin_usaha_file,我们来调整你的do_upload()方法:
function do_upload() { // 先加载Upload库(如果构造函数里没加载的话) $this->load->library('upload'); // 第一个文件:SIUP PDF的配置 $siup_config['upload_path'] = './upload/siup'; $siup_config['allowed_types'] = 'pdf'; $siup_config['file_name'] = 'SIUP_'.str_replace(' ','_',ltrim($this->input->post('nama'),'KM ')); // 初始化第一个配置并上传 $this->upload->initialize($siup_config); if (!$this->upload->do_upload('siup_file')) { // 第一个文件上传失败,收集错误 $error['siup_error'] = $this->upload->display_errors(); } else { // 第一个文件上传成功,获取信息 $data['siup_data'] = $this->upload->data(); } // 第二个文件:另一个PDF的配置(比如不同路径、文件名规则) $izin_config['upload_path'] = './upload/izin_usaha'; $izin_config['allowed_types'] = 'pdf'; $izin_config['file_name'] = 'IZIN_'.time(); // 用时间戳做文件名示例 // 重新初始化第二个配置并上传 $this->upload->initialize($izin_config); if (!$this->upload->do_upload('izin_usaha_file')) { // 第二个文件上传失败,收集错误 $error['izin_error'] = $this->upload->display_errors(); } else { // 第二个文件上传成功,获取信息 $data['izin_data'] = $this->upload->data(); } // 处理结果:如果有错误就返回,否则继续后续逻辑 if (!empty($error)) { $this->load->view('upload_error', $error); } else { $this->load->view('upload_success', $data); } }
关键注意点
- 每次上传前必须重新调用
initialize():CodeIgniter的Upload类实例是共享的,不重新初始化的话,会沿用之前的配置参数。 - 区分不同的文件字段名:
do_upload()方法里要传入对应的表单字段名,比如do_upload('siup_file'),不能漏掉。 - 确保上传目录存在且有写入权限:如果
./upload/siup或./upload/izin_usaha不存在,或者服务器没有写入权限,会导致上传失败,记得提前创建目录并设置权限。
这样调整后,两个文件就会按照各自的配置规则上传到指定目录啦~
内容的提问来源于stack exchange,提问作者Gusti Erlangga
相关产品推荐
相关产品推荐

