简体   繁体   中英

Invalid upload directory with CodeIgniter 1.7.2

I am attempting to create an image-upload form with CodeIgniter 1.7.2

However, when I attempt to upload an image, CI informs me the upload directory is invalid.

To check this, I uploaded a file to the uploads directory called test.txt with the content Hello, World! I then echoed out the contents of it, and lo and behold, it says hello. Beyond that, I can browse to the directory and view the contents of it in my browser, so the directory definitely exists and is viewable.

Controller:

class Pictures extends Site_Controller {
    // snip...
    public function upload() {
        $this->load->helper('form');
        $this->_render('Do Upload','pictures/upload',array('msg'=>''));
    }
    public function do_upload() {
        $this->load->helper('form');

        $config['upload_path'] = base_url().'uploads/';
        // test the directory:
        // echo file_get_contents($config['upload_path'].'test.txt');
        // should echo "Hello, World!"
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size']    = '2048';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

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

        if ( ! $this->upload->do_upload())
        {
            $data = array('msg' => $this->upload->display_errors());

            $this->_render('Do Upload (Errors!)','pictures/upload',$data);
        }    
        else
        {
            $uploaddata = $this->upload->data();
            $this->load->model('pictures_Model','pictures');
            $this->pictures->insertUploaded($uploaddata,$this->input->post('name'),$this->input->post('caption'));

            $data['msg'] = 'Successful Upload!';
            $this->_render('Do Upload (Success!)','pictures/upload',$data);
        }
    }
    //...
}

$this->_render() is just a shortcut function that wraps the specified view with the specified data in a layout with a specified title.

pictures/upload view:

<h1>Do Upload</h1>
<? if (isset($msg)) echo $msg; ?>

<?= form_open_multipart('pictures/do_upload');?>

<input type="file" name="userfile" />
<input type="text" name="name" />
<input type="text" name="caption" />

<br /><br />

<input type="submit" value="Upload" />

</form>

Finally, and probably unnecessary, the model insert:

public function insertUploaded($data,$name,$caption) {
    $row = array();
    $row['filename'] = $data['file_name'];
    $row['mime'] = $data['file_type'];
    $row['size'] = $data['file_size'];
    $row['name'] = $name;
    $row['caption'] = $caption;
    $row['img'] = file_get_contents($data['full_path']);

    $this->db->insert('pictures',$row);
}

Any idea why my upload directory is invalid?

 $config['upload_path'] = base_url().'uploads/';

您应该将其更改为:

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

CI generates that error when it is not able to find the directory or even when directory is not readable. First try to find out that the directory comes fine like:

echo base_url().'uploads/';

If it comes, check with directory permissions. chmod to 755.

If even directory permission is fine, try to add below line to your upload path.

$config['upload_path'] = $_SERVER['DOCUMENT_ROOT'] . '/' . base_url().'uploads/';

Make sure that your path is coming fine by echoing it out.

Hope that helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM