在codeigniter中上传图像

时间:2010-10-31 13:11:06

标签: image codeigniter

我正在尝试上传图片,创建缩略图但我收到错误。

这是我的控制器。

<?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




    }  
    }
    ?>

我的模特:

<?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['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');

        }



    }  
    }
    ?>

错误:

遇到PHP错误

严重性:警告

消息:重命名(C:/wamp/www/uploads/Heaven_Clouds.jpg,/pictures/kFttl7lpE7Rk.jpg)[function.rename]:没有这样的文件或目录

文件名:models / Process_image.php

行号:68

这是第68行:

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

3 个答案:

答案 0 :(得分:5)

删除

中“picutres”之前的“/”
rename($value['full_path'],'/pictures/'.$newimagename);

它想说你想把你重命名的文件放在一个位于Unix文件系统根目录下的名为“pictures”的目录中,那么你显然是在Windows系统中而你似乎没有“图片”磁盘根目录下的目录。

结果:

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

答案 1 :(得分:0)

这是一个非常简单的脚本,部分来自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']);

          }

这将拍摄5张图片,但如果您只有一张图片,则只需更改for循环即可。

答案 2 :(得分:0)

我有同样的问题但是,在我的情况下我只上传文件数组,所以我对库“Upload.php”进行了一些小改动

视图

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

控制器

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;

如果您要上传单个文件,请复制system / libraries / Upload.php

中的函数 函数do_upload($ field)函数do_upload_array($ field,$ i)

将[$ i]索引放在第160,162,196,197行

函数_file_mime_type($ _ FILES [$ field])函数_file_mime_type_array($ _ FILES [$ field],$ i)

并将[$ i]索引放在第1026,1043,1057和1065行

多数民众赞成......

您的文件数组现在可以轻松上传....