darshan
darshan

Reputation: 247

How to upload image in CodeIgniter?

In view

 <?php echo form_open_multipart('welcome/do_upload');?>
 <input type="file" name="userfile" size="20" />

In controler

function do_upload()
{
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';
    $config['overwrite'] = TRUE;
    $config['encrypt_name'] = FALSE;
    $config['remove_spaces'] = TRUE;
    if ( ! is_dir($config['upload_path']) ) die("THE UPLOAD DIRECTORY DOES NOT EXIST");
    $this->load->library('upload', $config);
    if ( ! $this->upload->do_upload('userfile')) {
        echo 'error';
    } else {

        return array('upload_data' => $this->upload->data());
    }
}

And I call this function like this

 $this->data['data'] = $this->do_upload();

and view this image:

<ul>
<?php foreach ($data['upload_data'] as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>

I don't know what's the error.

Upvotes: 18

Views: 149096

Answers (8)

Kishor Kattilath
Kishor Kattilath

Reputation: 1

In controller

 public function add_category(){
    $return_array = ['status' => false, 'message' => ''];

    // Retrieve input values
    $name = $this->input->post('name');
    $image = $_FILES['image']; // Get the uploaded file

    if ($image && $image['name']) {
        // Prepare the image name
        // $extension = pathinfo($image['name'], PATHINFO_EXTENSION);
        $Image1=explode('.', $image);
        $time = time();
        $image_name = $time . '.' . $extension;

        // Configure upload settings
        $config['upload_path'] = './Assets/Admin/hospitals';
        $config['allowed_types'] = 'jpg|jpeg|png';
        $config['file_name'] = $image_name;
        $config['max_size'] = 2048; // Maximum size in KB (2 MB)

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

        // Attempt to upload the file
        if ($this->upload->do_upload('image')) {
            // File uploaded successfully
            $upload_data = $this->upload->data(); // Get uploaded data
            $created_data = [
                'name' => $name,
                'image' => $upload_data['file_name'], // Store the image name in the database
            ];

            $this->load->model('User_model');
            $add_category = $this->User_model->add_category_model($created_data);
            if ($add_category) {
                $return_array['status'] = true;
                $return_array['message'] = 'Category added successfully.';
                $return_array['redirect_url'] = site_url('dashboard'); 
            }else
            {
                $return_array['message'] = 'Failed Try Again.';
            }
        } else {
            // Handle upload error
            $return_array['message'] = $this->upload->display_errors();
        }
    } else {
        $return_array['message'] = 'Please upload an image.';
    }
    // Return JSON response
    echo json_encode($return_array);
}

Upvotes: 0

Harikrishna K
Harikrishna K

Reputation: 1

check $this->upload->initialize($config); this works fine for me

    $new_image_name = "imgName".time() . str_replace(str_split(' ()\\/,:*?"<>|'), '', 
    $_FILES['userfile']['name']);
    $config = array();
    $config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
    $config['file_name'] = $new_image_name;
    $config['max_size']  = '0';
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|png|mp4|jpeg';
    $config['file_name'] = url_title("imgsclogo");
    $config['max_size']      = '0';
    $config['overwrite']     = FALSE; 
    $this->upload->initialize($config);
    $this->upload->do_upload();
    $data = $this->upload->data();
}

Upvotes: 0

Hiren Makwana
Hiren Makwana

Reputation: 516

Simple Image upload in codeigniter

Find below code for easy image upload:

public function doupload()
     {
        $upload_path="https://localhost/project/profile"  
        $uid='10'; //creare seperate folder for each user 
        $upPath=upload_path."/".$uid;
        if(!file_exists($upPath)) 
        {
                   mkdir($upPath, 0777, true);
        }
        $config = array(
        'upload_path' => $upPath,
        'allowed_types' => "gif|jpg|png|jpeg",
        'overwrite' => TRUE,
        'max_size' => "2048000", 
        'max_height' => "768",
        'max_width' => "1024"
        );
        $this->load->library('upload', $config);
        if(!$this->upload->do_upload('userpic'))
        { 
            $data['imageError'] =  $this->upload->display_errors();
             
        }
        else
        {
            $imageDetailArray = $this->upload->data();
            $image =  $imageDetailArray['file_name'];
        }
        
     }

Upvotes: 11

Hashem Qolami
Hashem Qolami

Reputation: 99464

It seems the problem is you send the form request to welcome/do_upload, and call the Welcome::do_upload() method in another one by $this->do_upload().

Hence when you call the $this->do_upload(); within your second method, the $_FILES array would be empty.

And that's why var_dump($data['upload_data']); returns NULL.

If you want to upload the file from welcome/second_method, send the form request to the welcome/second_method where you call $this->do_upload();.

Then change the form helper function (within the View) as follows1:

// Change the 'second_method' to your method name
echo form_open_multipart('welcome/second_method');

File Uploading with CodeIgniter

CodeIgniter has documented the Uploading process very well, by using the File Uploading library.

You could take a look at the sample code in the user guide; And also, in order to get a better understanding of the uploading configs, Check the Config items Explanation section at the end of the manual page.

Also there are couple of articles/samples about the file uploading in CodeIgniter, you might want to consider:

Just as a side-note: Make sure that you've loaded the url and form helper functions before using the CodeIgniter sample code:

// Load the helper files within the Controller
$this->load->helper('form');
$this->load->helper('url');

// Load the helper files within the application/config/autoload
$autoload['helper'] = array('form', 'url');


1. The form must be "multipart" type for file uploading. Hence you should use `form_open_multipart()` helper function which returns: ``

Upvotes: 17

shashank panchal
shashank panchal

Reputation: 1

Below code for an uploading a single file at a time. This is correct and perfect to upload a single file. Read all commented instructions and follow the code. Definitely, it is worked.

public function upload_file() {
    ***// Upload folder location***
    $config['upload_path'] = './public/upload/';

    ***// Allowed file type***
    $config['allowed_types'] = 'jpg|jpeg|png|pdf';

    ***// Max size, i will set 2MB***
    $config['max_size'] = '2024';

    $config['max_width'] = '1024';
    $config['max_height'] = '768';

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

    ***// do_upload is the method, to send the particular image and file on that 
       // particular 
       // location that is detail in $config['upload_path']. 
       // In bracks will set name upload, here you need to set input name attribute 
       // value.***

    if($this->upload->do_upload('upload')) {
       $data = $this->upload->data();
       $post['upload'] = $data['file_name'];
    } else {
      $error = array('error' => $this->upload->display_errors());
    }
 }

Upvotes: 0

Amol Jadhav
Amol Jadhav

Reputation: 21

$image_folder = APPPATH . "../images/owner_profile/" . $_POST ['mob_no'] [0] . $na;
            if (isset ( $_FILES ['image'] ) && $_FILES ['image'] ['error'] == 0) {
                list ( $a, $b ) = explode ( '.', $_FILES ['image'] ['name'] );
                $b = end ( explode ( '.', $_FILES ['image'] ['name'] ) );
                $up = move_uploaded_file ( $_FILES ['image'] ['tmp_name'], $image_folder . "." . $b );
                $path = ($_POST ['mob_no'] [0] . $na . "." . $b);

Upvotes: 0

madhu kant tiwari
madhu kant tiwari

Reputation: 51

//this is the code you have to use in you controller 

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

// directory (http://localhost/codeigniter/index.php/your directory)

        $config['allowed_types'] = 'gif|jpg|png|jpeg';  
//Image type  

        $config['max_size'] = 0;    

 // I have chosen max size no limit 
        $new_name = time() . '-' . $_FILES["txt_file"]['name']; 

//Added time function in image name for no duplicate image 

        $config['file_name'] = $new_name;

//Stored the new name into $config['file_name']

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

        if (!$this->upload->do_upload() && !empty($_FILES['txt_file']['name'])) {
            $error = array('error' => $this->upload->display_errors());
            $this->load->view('production/create_images', $error);
        } else {
            $upload_data = $this->upload->data();   
        }

Upvotes: 3

shyam prasad
shyam prasad

Reputation: 17

Change the code like this. It works perfectly:

public function uploadImageFile() //gallery insert
{ 
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $new_image_name = time() . str_replace(str_split(' ()\\/,:*?"<>|'), '', 
    $_FILES['image_file']['name']);
    $config['upload_path'] = 'uploads/gallery/'; 
    $config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
    $config['file_name'] = $new_image_name;
    $config['max_size']  = '0';
    $config['max_width']  = '0';
    $config['max_height']  = '0';
    $config['$min_width'] = '0';
    $config['min_height'] = '0';
    $this->load->library('upload', $config);
    $upload = $this->upload->do_upload('image_file');
    $title=$this->input->post('title');
    $value=array('title'=>$title,'image_name'=>
    $new_image_name,'crop_name'=>$crop_image_name);}

Upvotes: 0

Related Questions