Codeigniter 上传文件不起作用

Posted

技术标签:

【中文标题】Codeigniter 上传文件不起作用【英文标题】:Codeigniter Upload File not working 【发布时间】:2013-12-09 08:49:46 【问题描述】:
function submit_article() 
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');
    $this->form_validation->set_error_delimiters('<p style="color:red">', '<br/></p>');

    $my_rules = array(
        array(
            'field' => 'title',
            'label' => 'Title',
            'rules' => 'required|min_length[5]|max_length[20]|xss_clean'
        ),
        array(
            'field' => 'additionalUpload',
            'label' => 'Additional Upload',
            'rules' => 'callback_is_image'
        )
    );

    $this->form_validation->set_rules($my_rules);

    if ($this->form_validation->run() == FALSE) 
        //ERROR
        $data['title'] = ucfirst('submit Article');
        $this->load->view('templates/header', $data);
        $this->load->view('submit_article', $data);
        $this->load->view('templates/footer', $data);
     else 
        //SUCCESS
        $data['title'] = ucfirst('article Submitted');
        $this->load->view('templates/header', $data);
        $this->load->view('forms_view/submit_article_success', $data);
        $this->load->view('templates/footer', $data);
    


function is_image($value) 

    $config['upload_path'] = './public/uploads/';
    $config['allowed_types'] = 'gif|jpg|png|pdf|tiff';
    $config['max_size'] = '2048';
    $config['max_width'] = '0';
    $config['max_height'] = '0';
    $config['remove_spaces'] = true;

    $this->load->library('upload', $config);

    if (!$this->upload->do_upload()) 
        $this->form_validation->set_message('is_image', $this->upload->display_errors('<p style="color:red">', '<br/></p>'));
        return FALSE;
     else 
        $this->upload->data();
        return TRUE;
    

大家好,这是我在codeigniter中处理多部分表单数据的控制器功能代码,实际上additionalUpload字段不是必填字段,但如果用户在文件类型的additionalUpload字段中上传文件,我希望它被验证,当我运行上述代码并单击提交按钮而不选择任何文件时,它会显示错误“您没有选择要上传的文件”。我不想要,因为这不是必填字段,这是我的第一个问题..

第二个是当我选择一个文件并单击提交按钮时,它再次显示“您没有选择要上传的文件。”。

注意:我刚刚在这里显示了我的表单的两个字段,即标题,附加上传,但我总共有 9 个字段。

在此先感谢,请帮助任何人。

【问题讨论】:

$this-&gt;upload-&gt;do_upload('your_field_name') 感谢它为我所做的工作....这解决了我的第二个问题..但我的第一个问题仍未解决..请帮助我@dianuj 先生 【参考方案1】:

首先你要输入文件的名称。

<input type="file" name="image"/>
$this->upload->do_upload('image');

第二,不能让max_width和max height为0

$config['max_width']    = '2048';
$config['max_height']   = '2048';

先试试再看

对于验证字段文件:

if($_FILES['you_field_name']['tmp_name'])

       //your code  

问候

【讨论】:

感谢您的重要时间.. 但是我们可以将宽度和高度设置为 0 以实现无限性.. 现在我的问题是该字段不需要这是一个附加字段,顾名思义.. 所以它当用户没有选择任何文件时,不应该显示任何错误消息..但在我的情况下,它显示的错误我不想要这个..你有什么建议吗? 非常感谢@webyseo 先生【参考方案2】:

试试这个检查$_FILES是否不为空然后进行验证,否则什么都不做

 $my_rules = array(
        array(
            'field' => 'title',
            'label' => 'Title',
            'rules' => 'required|min_length[5]|max_length[20]|xss_clean'
        )
    );

if(!empty($_FILES))

     $my_rules[]= array(
            'field' => 'additionalUpload',
            'label' => 'Additional Upload',
            'rules' => 'callback_is_image'
        )


$this->form_validation->set_rules($my_rules);

在您的上传功能中,您需要指定字段名称

$this->upload->do_upload('your_field_name')

【讨论】:

以上是关于Codeigniter 上传文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 上传文件不起作用

Codeigniter上传文件不起作用

Codeigniter重命名图像文件不起作用

Codeigniter:MP4 视频上传不起作用

CodeIgniter 中视频文件上传的奇怪问题

Codeigniter psd 和 ai mime 类型不起作用