使用CodeIgniter表单处理图像上传的最佳方法

时间:2015-07-13 05:59:13

标签: php codeigniter file-upload

由于有人将自己的问题联系起来,答案甚至远不及我的问题,我想:

  1. 运行表单验证
  2. 检查图像实际上是图像(使用image_validation?)
  3. 如果表单验证返回true,则上传图像。
  4. 就目前而言,即使我的图片正确,但表单验证返回false,我的图片也会上传。我想阻止这一点。

    目前我正在尝试创建一个允许用户选择要上传的文件的表单。我已经为其他输入设置了规则,并为我的图片上传设置了回调。

    问题在于,无论如何,只要图像通过验证,就会上传,即使其他一个输入中存在错误。

    我在StackOverflow上找到的任何答案都是让我处于同一位置的答案。

        $this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean');
        $this->form_validation->set_rules('description', 'Description', 'trim|required|xss_clean');
        $this->form_validation->set_rules('approved', 'Approved', 'trim|xss_clean');
        $this->form_validation->set_rules('upload', 'File Upload', 'callback_do_upload');
    
        if(($this->form_validation->run() == FALSE))
        {
            view('someview', $this->data);
        }
    

    我已经为我的控制器编写了自己的do_upload函数,用于验证用户是否选择了图像,如果是,则验证并上传。

    public function do_upload ()
    {
        $config['upload_path'] = './uploads/articles';
        $config['allowed_types'] = 'gif|jpg|jpeg|png';
        $this->load->library('upload', $config);
    
        if(is_uploaded_file($_FILES['upload']['tmp_name']))
        {
            if($this->upload->do_upload('upload'))
            {
                $upload_data = $this->upload->data();
                return TRUE;
            }
            else
            {
                $this->form_validation->set_message('do_upload', $this->upload->display_errors());
                return FALSE;
            }
        }
        else
        {
            return TRUE;
        }
    }
    

    假设我没有在输入中输入说明,但我选择要上传的图片,然后会在图片上运行验证,上传,然后$this->form_validation->run()将返回false缺乏描述。我已尝试从控制器$this->upload->do_upload()中移除do_upload,但依赖于$_FILES数组,但不会验证上传。

1 个答案:

答案 0 :(得分:0)

最佳方式是使用PLUpload文件上传器插件库