尽管会议配置标准PHP Codeigniter,文件上载仍然失败

时间:2014-03-15 07:29:40

标签: php codeigniter file-upload

我试图让用户使用CodeIgniter的内置文件上传类上传文件。

这是上传表单:

upload_form.php

<?php if($error) : ?>
<div class="alert alert-danger">
    <p><?php echo $error;?></p>
</div>
<?php endif ;?>

<form  class="form-horizontal" role="form" action="<?=base_url().'upload/do_upload'?>" enctype = "multipart/form-data" >
    <div class="form-group">
        <label for="userfile" class="col-sm-1 control-label">Picture</label>
        <div class="col-sm-1">
            <input type="file" id="userfile" name ="userfile">
        </div>
    </div>
    <button type="submit" class="col-sm-offset-1 btn btn-default">Submit</button>
</form>

如您所见,用户选择一个文件,然后提交。

这是表单的操作文件:

upload.php的

        //Checks Image Before Upload, Throws Errors Or Uploads, Resizes And Shows Upload Success Page
    function do_upload()

    {
        //Config Parameters For Allowed Uploads
        $config['upload_path']= base_url().'uploads';
        $config['allowed_types']='gif|jpeg|png|jpg|bmp';
        $config['max_size']='5000';
        $config['max_width']='10000';
        $config['max_height']='10000';
        $config['remove_spaces'] = TRUE;
        $config['encrypt_name'] = TRUE; 


        //Load The Upload Library With Said Configuration
        $this->load->library('upload',$config);

        //If The Image Didn't Meet The Required Parameters
        if(!$this->upload->do_upload())

            {
                //Throw An Error, Then Load The Uplaod Form Again With The Error Deatils
                $error = array('error'=>$this->upload->display_errors());
                $this->load->view('header');
                $this->load->view('upload_form',$error);
                $this->load->view('footer');
                echo "here";
                die();
            }

        //If The Image Met The Required Parameters
        else

            {
                                 Upload Image
            }

        }

请注意:

  1. 表单action指向正确的位置。
  2. 表单enctype已正确设置为multipart/form-data /
  3. 我遵守CI's Docs的确切要求。
  4. 鉴于所有这些,do_upload函数仍然无法执行(意味着 - (!$this->upload->do_upload())为真)和记录到错误数组的错误(通过codeigniter&#39; s {{1} } function)您没有选择要上传的文件。

    将问题划分为可消化的块:

    1. 为什么功能无法开始?
    2. 当我明确尝试上传文件时,为什么会显示此错误?
    3. 所有这些都是错误的 - 粗略的书面形式,或者滥用CI的文件上传类?

2 个答案:

答案 0 :(得分:0)

可能是mimes类型的问题。 请检查mimes配置文件mimes.php中可用的mime类型

如果没有,则按照代码

获取mime类型
echo $this->upload->file_type ; // will give mime type of file.

之后使用它
$this->upload->do_upload(); 

您将获得mime类型。将该mime类型添加到位于

的文件mimes.php中

/应用/配置

例如如果文件有扩展名pptx,mime类型是application / powerpoint 然后将pptx的$ mimes数组更新为

 'pptx' => array('application/powerpoint')

编辑:

完成以下更改,对我有用。

1)在视图中我添加了method="post"

<form class="form-horizontal" role="form" method="post" action="<?=base_url().'welcome/do_upload'?>" enctype = "multipart/form-data" >

2)并在控制器上传路径中声明为

$config['upload_path']= './uploads/';

此上传目录与应用程序目录位于同一文件夹中。

答案 1 :(得分:0)

最终得到了解决方案 - 与<form>标签设置有关。

这是正确的:

<form action="upload_destination_url" method="post" accept-charset="utf-8" enctype="multipart/form-data" class="form-horizontal">