【问题标题】:CodeIgniter 3.1.3 Upload multiple files handle errorsCodeIgniter 3.1.3 上传多个文件处理错误
【发布时间】:2026-01-16 01:20:07
【问题描述】:

我想一次上传多个文件。 我以这种方式在我的表单中使用:

<input type="file" name="files[]" multiple/>

问题是我想在我的配置目录上正确上传之前验证每个文件。

如果有人一次上传 15 个文件并且一个文件没有有效的大小和/或类型....我想中止所有文件的上传并在表单上给出错误。 Al 认为很好,但我不能先检查(使用 codeigniter 库上传) 我尝试这样做以验证文件是否有效,但它们已经上传到我的文件夹文件中,我不想要这个:

if ($_FILES['files']['name']['0'] != '') {
    $config['upload_path'] = 'docs/';
    $config['allowed_types'] = 'jpg|jpeg|png|gif|pdf';
    $this->load->library('upload',$config);
    foreach ($_FILES['files']['name'] as $key=>$value) {
        $file_upload[$key] = array(
                'name'=>$_FILES['files']['name'][$key],
                'type'=>$_FILES['files']['type'][$key],
                'tmp_name'=>$_FILES['files']['tmp_name'][$key],
                'error'=>$_FILES['files']['error'][$key],
                'size'=>$_FILES['files']['size'][$key]
            );
    }
    $i = 0;
    foreach ($file_upload as $key=>$file) {
        $this->upload->initialize($config);
        $_FILES['file' . $key] = $file_upload[$key];
        if(!$this->upload->do_upload('file' . $key)) {
            if ($i == 0) {
                $this->error['files_error'] = sprintf($this->upload->display_errors(),$_FILES['file' . $key]['name']);
                $this->error['error_warning'] = $this->lang->line('error_warning_form');
            } else {
                $this->error['files_error'] .= sprintf($this->upload->display_errors(),$_FILES['file' . $key]['name']);
            }
            $i++;
        }
    }
}

我想验证每个文件,如果所有文件都正常,则将它们上传到我的文件夹

附:对不起我的英语

感谢您的帮助

【问题讨论】:

  • 上传文件时能否显示错误截图?
  • 您总是至少有一个临时文件夹,其中确实上传了文件。这就是为什么许多人还应用客户端验证的原因。
  • 上传文件时不会出错。我的表格很大。如果(任何输入字段的)表单中有任何错误,用户将看到错误。用户必须再次选择要上传的文件。每次我验证表单并且无效时,检查要上传的文件是否为正确类型的唯一方法是使用 $this->upload->do_upload()。但是每次我验证要上传的文件时,我的文件目录中都会有 file.pdf、file1.pdf、file3.pdf 等等。只有最后一个文件也将与我在数据库中的表单链接。在该函数移动文件之前,它们位于 /tmp/ 中。有什么方法可以为此使用 codeigniter 吗?

标签: php codeigniter file-upload


【解决方案1】:

我通过扩展类上传来解决它。我曾经做一个名为 do_upload_check 的新函数,我使用 do_upload 中的所有数据,但我删除了文件从 /tmp/ 移动到我的目录以进行文件上传的最后一行

【讨论】: