ExpressionEngine CMS
Open, Free, Amazing

Thread

This is an archived forum and the content is probably no longer relevant, but is provided here for posterity.

The active forums are here.

Codeigniter Multiple Upload Images/ files / video / audio files

February 19, 2012 7:32am

Subscribe [5]
  • #1 / Feb 19, 2012 7:32am

    alexaaaaaaaaaa

    91 posts

    Hi all, this is nothing new but i thought that maybe someone will use this in the future.

    NOTICE. The code it’s not mine but i’ll share it anyway
    so what do you need jquery and a new jquery plugin you can get them from HERE
    once you get them create 1 controller

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Upload extends CI_Controller {
    
    
    
    public function __construct()
     {
      parent::__construct();
      $this->load->helper(array('form', 'url'));
     }
    
    public function index()
     {
      $this->load->view('admin/upload', array('error' => ''));
     }
    public function do_upload()
     {
     
         $upload_path_url = base_url().'uploads/';
     
      $config['upload_path'] = FCPATH.'uploads/';
      $config['allowed_types'] = 'jpg';
      $config['max_size'] = '30000';
      $config['encrypt_name'] = true;
      
        $this->load->library('upload', $config);
    
        if ( ! $this->upload->do_upload())
        {
         $error = array('error' => $this->upload->display_errors());
         $this->load->view('admin/upload', $error);
        }
        else
        {  
            $data = $this->upload->data();
       
          $this->load->library('image_lib');
       $config['image_library'] = 'gd2';
       $config['source_image'] = 'uploads/'.$data['file_name'];
       $config['new_image'] = 'uploads/thumbs/'.$data['file_name'];
       $config['maintain_ratio'] = TRUE;
       $config['width'] = 200;
       $config['height'] = 200;
       $this->image_lib->initialize($config);
       $this->image_lib->resize();
       $this->image_lib->clear();
       
       echo $this->image_lib->display_errors();
      
       //set the data for the json array 
       $info->name = $data['file_name'];
       $info->size = $data['file_size'];
       $info->type = $data['file_type'];
       $info->url = $upload_path_url .$data['file_name'];
       $info->thumbnail_url = $upload_path_url .'/thumbs/' .$data['file_name'];//I set this to original file since I did not create thumbs.  change to thumbnail directory if you do = $upload_path_url .'/thumbs' .$data['file_name']
       $info->delete_url = base_url().'index.php/upload/deleteImage/'.$data['file_name'];
       $info->delete_type = 'DELETE';
              
    
     if (IS_AJAX) {   //this is why we put this in the constants to pass only json data
                echo json_encode(array($info));
                        //this has to be the only the only data returned or you will get an error.
                        //if you don't give this a json array it will give you a Empty file upload result error
                        //it you set this without the if(IS_AJAX)...else… you get ERROR:TRUE (my experience anyway)
                          }
     else {   // so that this will still work if javascript is not enabled
         $file_data['upload_data'] = $this->upload->data();
         $this->load->view('admin/upload_success', $file_data);
      }
         
      }
    
    }
     
    
    public function deleteImage($file)//gets the job done but you might want to add error checking and security
     {
      $success =unlink(FCPATH.'uploads/' .$file);
      //info to see if it is doing what it is supposed to 
      $info->sucess =$success;
      $info->path =base_url().'uploads/' .$file;
      $info->file =is_file(FCPATH.'uploads/' .$file);
     if (IS_AJAX) {//I don't think it matters if this is set but good for error checking in the console/firebug
         echo json_encode(array($info));}
     else {     //here you will need to decide what you want to show for a successful delete
         $file_data['delete_data'] = $file;
         $this->load->view('admin/delete_success', $file_data); 
            }
         
     }    
    }

    then create 3 view files in my case under the admin folder
    upload.php in this file copy paste the code from the jquery file and change the path to the js and css files and the form action url
    then create
    upload_success.php

    <?php
    echo '{"name":"'.$upload_data['file_name'].'","type":"'.$upload_data['file_type'].'","size":"'.$upload_data['file_size'].'"}';
    ?>
    <br><br><br>
    <a href="http://upload/delete">?>"href= "<?php echo base_url().'uploads/' .$upload_data['file_name'] ?>">_<?php echo base_url()._</a><?php echo '<br>name: ' .$upload_data['file_name'] .'<br>size: ' .$upload_data['file_size'] .' k' ?>_ <!-- <br><a ]DELETE</a>-->

    and delete_success.php

    <?php
    echo 'file:' .$delete_data .'-delted' ;
    ?>

    That’s it if you have problems like syntax error unexpected < then i should remind, you must create 1 folder called uploads and under it thumbs with write permissions.
    If you have problems i’ll be glad to help you.

  • #2 / Feb 19, 2012 9:30am

    InsiteFX

    6819 posts

    IS_AJAX is useless because it was never defined as a constant!

    Besides CI has its own ajax check now!

    $this->input->is_ajax_request();

    See the input class…

     

  • #3 / Feb 19, 2012 9:52am

    alexaaaaaaaaaa

    91 posts

    IS_AJAX is useless because it was never defined as a constant!

    Besides CI has its own ajax check now!

    $this->input->is_ajax_request();

    See the input class…

    yeah that’s correct! thank you

  • #4 / Feb 24, 2012 11:36pm

    Irvana

    2 posts

    I am very newbie at this (codeigniter) stuff. Just wondering how to connect with database and make it direct to file path?
    Thanks a lot.

  • #5 / Feb 24, 2012 11:56pm

    alexaaaaaaaaaa

    91 posts

    I am very newbie at this (codeigniter) stuff. Just wondering how to connect with database and make it direct to file path?
    Thanks a lot.

    hi Irvana, if you want to connect your codeigniter to database please go here
    application/config/database.php and edit your file to match your configuration, also in the same folder config you have the config.php where your can setup the url of the file and the secret key if you didn’t setup those ...

     

  • #6 / Feb 25, 2012 1:26am

    Irvana

    2 posts

    ok…just confuse with upload.class.php at folder server.

    how to modify upload directory from this script

    'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',

    into root of my CI?

    i am sorry for my question but totally stuck when i try to modify the script without “$_SERVER[‘SCRIPT_FILENAME’]” because error appear when i upload the file—> SyntaxError: Unexpected token <

  • #7 / Feb 25, 2012 2:05am

    aquary

    143 posts

    Mostly I use ‘./folder/’ for the upload folder… never found a problem with that one. I guess the “./” is relative to the index.php which on the root ?

    But your error… seems to be more about you forgot to remove something along with $_SERVER[‘SCRIPT_FILENAME’].

  • #8 / Aug 04, 2012 6:06am

    RockyS

    9 posts

    This code doesn’t work with latest CI. Any updates?

  • #9 / Aug 04, 2012 6:19am

    alexaaaaaaaaaa

    91 posts

    This code doesn’t work with latest CI. Any updates?

    what problems do you have?

  • #10 / Aug 04, 2012 6:25am

    RockyS

    9 posts

    After submitting the form (with files) I get no error and no progress either, files aren’t uploaded, I have created ‘uploads’ folder in CI root

    http://s18.postimage.org/bt111wlt5/Capture.jpg

    And btw, how can I change upload directory dynamically with the same form? (I want to have multiple folders ex. banners, images, pdf,doc etc..)  User can choose folder from select box.

    Current script:

    if($.fn.wl_File) $.fn.wl_File.defaults = {
     url: 'http://localhost/ci/assets/upload.php',
     autoUpload: true,
     paramName: 'files',
     multiple: false,
     allowedExtensions: ['jpg','jpeg','gif','png','PNG','doc','zip','docx','txt','pdf','rar'],
     maxNumberOfFiles: 0,
     maxFileSize: 10000,
     minFileSize: 0,
     sequentialUploads: false,
     dragAndDrop: true,
     formData: {},
     text: {
      ready: 'pripravljen',
      cancel: 'prekliči',
      remove: 'odstrani',
      uploading: 'nalagam…',
      done: 'končano',
      start: 'začni shranjevanje',
      add_files: 'dodaj datoteke',
      cancel_all: 'prekliči shranjevanje',
      remove_all: 'odstrani vse'
     },
     onAdd: function (e, data) {},
     onDelete:function(files){},
     onCancel:function(file){},
     onSend: function (e, data) {},
     onDone: function (e, data) {},
     onFinish: function (e, data) {},
     onFail: function (e, data) {},
     onAlways: function (e, data) {},
     onProgress: function (e, data) {},
     onProgressAll: function (e, data) {},
     onStart: function (e) {},
     onStop: function (e) {},
     onChange: function (e, data) {},
     onDrop: function (e, data) {},
     onDragOver: function (e) {},
     onFileError: function (error, fileobj) {
      $.msg('Neveljavna datoteka: ' + fileobj.name, {
       header: error.msg + ' (' + error.code + ')'
      });
     }
    };

    modifying

    'upload_dir' => dirname(__FILE__).'/uploads/',
                'upload_url' => dirname($_SERVER['PHP_SELF']).'/uploads/',

    To (doesn’t work)

    'upload_dir' => dirname(__FILE__).'/'.$_REQUEST['folder'].'/',
                'upload_url' => dirname($_SERVER['PHP_SELF']).'/'.$_REQUEST['folder'].'/',

    Because I get ‘Undefined variable: folder’

     

  • #11 / Aug 04, 2012 6:40am

    alexaaaaaaaaaa

    91 posts

    well try not to use the request folder and give it the right folder or if you want to upload to a specific folder you must know how to create with php a folder and give it the right permissions also with php. If this script it’s not working for you, try another one i think it’s name it’s valum or something like that.

  • #12 / Aug 04, 2012 6:46am

    RockyS

    9 posts

    That’s the thing, user must choose folder from select input and that value should be transfered to script but somehow it isn’t, even with $_POST it isn’t posted.

    I will try to contact blueimp about this issue.

  • #13 / Aug 04, 2012 7:01am

    alexaaaaaaaaaa

    91 posts

.(JavaScript must be enabled to view this email address)

ExpressionEngine News!

#eecms, #events, #releases