开发者

Uploading an image in codeigniter

I am trying to upload an image,create thumbnail but i get an error.

Here is my controller.

<?php
class Upload extends Controller {

    function Upload()
    {
        parent::Controller();
        $this->load->helper(array('form','url','file'));


    }

    function index()
    {

        $this->load->view('upload_form'); //Upload Form

    }

    function picupload()
    {
        //Load Model
        $this->load->model('Process_image');

        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size']    = '2048'; //2 meg


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

        foreach($_FILES as $key => $value)
        {
            if( ! empty($key['name']))
            {
                $this->upload->initialize($config);

                if ( ! $this->upload->do_upload($key))
                {
                    $errors[] = $this->upload->display_errors();

                }    
                else
                {

                    $this->Process_image->process_pic();

                }
             }

        }


        $data['success'] = 'Thank You, Files Upladed!';

        $this->load->view('upload_success', $data); //Picture Upload View




    }  
    }
    ?>

My model:

<?php
class Process_image extends Model {

    function Process_image()
    {
        parent::Model();

        $this->load->library('image_lib');
        //Generate random Activation code

        function generate_code($length = 10){

                if ($length <= 0)
                {
                    return false;
                }

                $code = "";
                $chars = "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
                srand((double)microtime() * 1000000);
                for ($i = 0; $i < $length; $i++)
                {
                    $code = $code . substr($chars, rand() % strlen($chars), 1);
                }
                return $code;

                }

    }

function process_pic()
    {   
        //Connect to database
        $this->load->database();

        //Get File Data Info
        $uploads = array($this->upload->data());

        $this->load->library('image_lib');

        //Move Files To User Folder
        foreach($uploads as $key[] => $value)
        {

                        //Gen Random code for new file name
            $randomcode = generate_code(12);

            $newimagename = $randomcode.$value['file_ext'];

            //Creat Thumbnail
            $config['image_library'] = 'GD2';
            $config['source_image'] = $value['full_path'];
            $config['create_thumb'] = TRUE;
            $config['thumb_marker'] = '_tn';
            $config['master_dim'] = 'width';
            $config['quality'] = 75;
            $config['maintain_ratio'] = TRUE;
            $config['width'] = 175;
            $config['height'] = 175;
            $config['new_image'] = '/pictures/'.$newimagename;

            //$this->image_lib->clear();
            $this->image_lib->initialize($config);
            //$this->load->library('image_lib', $config);
            $this->image_lib->resize();

            //Move Uploaded Files with NEW Random name
            rename($value开发者_StackOverflow中文版['full_path'],'/pictures/'.$newimagename);

            //Make Some Variables for Database
            $imagename = $newimagename;
            $thumbnail = $randomcode.'_tn'.$value['file_ext'];
            $filesize = $value['file_size'];
            $width = $value['image_width'];
            $height = $value['image_height'];
            $timestamp = time();

            //Add Pic Info To Database
            $this->db->set('imagename', $imagename);
            $this->db->set('thumbnail', $thumbnail);
            $this->db->set('filesize', $filesize);
            $this->db->set('width', $width);
            $this->db->set('height', $height);
            $this->db->set('timestamp', $timestamp);

            //Insert Info Into Database
            $this->db->insert('pictures');

        }



    }  
    }
    ?>

The error:

A PHP Error was encountered

Severity: Warning

Message: rename(C:/wamp/www/uploads/Heaven_Clouds.jpg,/pictures/kFttl7lpE7Rk.jpg) [function.rename]: No such file or directory

Filename: models/Process_image.php

Line Number: 68

This is line 68:

rename($value['full_path'],'/pictures/'.$newimagename);


Remove the "/" before "picutres" in

rename($value['full_path'],'/pictures/'.$newimagename);

It wanna say that you want put your renamed file in a directory named "pictures" placed at the root of an Unix file system, then you're obviously in a Windows system and you do not seem to have a "pictures" directory at the root of your disk.

result :

rename($value['full_path'],'pictures/'.$newimagename);


This is a very simple script taken partly from the CI Docs:

          $config['upload_path'] = 'uploads/cgm/';
          $config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
          $config['max_size']  = '0';
          $config['max_width']  = '0';
          $config['max_height']  = '0';
          $this->load->library('upload', $config);


          $configThumb = array();
          $configThumb['image_library'] = 'gd2';
          $configThumb['source_image'] = '';
          $configThumb['create_thumb'] = TRUE;
          $configThumb['maintain_ratio'] = TRUE;

          $configThumb['width'] = 100;
          $configThumb['height'] = 120;
          $this->load->library('image_lib');

          for($i = 1; $i < 6; $i++) {
            $upload = $this->upload->do_upload('file'.$i);
            if($upload === FALSE) continue;
            $data = $this->upload->data();

            $uploadedFiles[$i] = $data;

            $imgName = $this->pictures_m->addPicture(array('listing_id' => $listing_id, 'ext' => $data['file_ext'], 'picture_name' => $this->input->post('file'.$i.'name')));

            if($data['is_image'] == 1) {
              $configThumb['source_image'] = $data['full_path'];
              $configThumb['new_image'] = $data['file_path'].$imgName.$data['file_ext'];
              $this->image_lib->initialize($configThumb);
              $this->image_lib->resize();
            }
    rename($data['full_path'], $data['file_path'].$imgName.$data['file_ext']);

          }

this will take 5 images, but if you only have one, you can just change the for loop.


i had the same problem but, in my scenario i've to only upload the array of files so i did some small changes to the library 'Upload.php'

view

<form encrypt="multipart/form-data" ...>
<input type="file" name="your_name[]" />
<input type="file" name="your_name[]" />
<input type="submit" />
</form>

controller

for($i = 0; $i < count($_FILES['your_name']['name']); $i++) {
    $config['upload_path'] = 'your upload path';
    $this->upload->initialize($config);
    $this->upload->do_upload('listing_images', $i);
endfor;

if you have single file to upload then duplicate the function in system/libraries/Upload.php

function do_upload($field) to function do_upload_array($field, $i)

put [$i] index on lines 160, 162, 196, 197

and

function _file_mime_type($_FILES[$field]) to function _file_mime_type_array($_FILES[$field], $i)

and put [$i] index on lines 1026, 1043, 1057 and 1065

thats it...

your file array will upload easily now....

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜