Codeigniter multiple file upload messes file extension

痴心易碎 提交于 2019-11-27 03:12:31
Vishal

I solved this exact problem by amending the Upload.php files located in the library folder.

Comment out line 935:

$filename = $this->file_name;
thephpx

Faced the exact similar stuff 2 days ago but did it the old fashioned way hope it helps. try this ..

function tester(){

 $this->load->library('upload');  // NOTE: always load the library outside the loop
 $this->total_count_of_files = count($_FILES['filename']['name'])
 /*Because here we are adding the "$_FILES['userfile']['name']" which increases the count, and for next loop it raises an exception, And also If we have different types of fileuploads */
 for($i=0; $i<$this->total_count_of_files; $i++)
 {

   $_FILES['userfile']['name']    = $_FILES['filename']['name'][$i];
   $_FILES['userfile']['type']    = $_FILES['filename']['type'][$i];
   $_FILES['userfile']['tmp_name'] = $_FILES['filename']['tmp_name'][$i];
   $_FILES['userfile']['error']       = $_FILES['filename']['error'][$i];
   $_FILES['userfile']['size']    = $_FILES['filename']['size'][$i];

   $config['file_name']     = 'test_'.$i;
   $config['upload_path']   = './public/uploads/';
   $config['allowed_types'] = 'jpg|jpeg|gif|png';
   $config['max_size']      = '0';
   $config['overwrite']     = FALSE;

  $this->upload->initialize($config);

  if($this->upload->do_upload())
  {
    $error += 0;
  }else{
    $error += 1;
  }
 }

 if($error > 0){ return FALSE; }else{ return TRUE; }

}

For me it was enough to recall $this->upload->initialize($config); every time I called $this->upload->do_upload()

I am a bit confused by your answer thephpx. Won't restructuring $_FILES like that kill off the subarrays once you ahve run it once?

At any rate, I was trying OP's approach by adding the extra index to the a few of the upload library's lines.

I made it work by putting the for loop (over all files) in the upload controller, and the extra index $k as a parameter in the do_upload function in the library.

            $this->load->library('upload');
        for ($k = 0; $k < count($_FILES['userfile']['name']); $k++) {
            $this->upload->initialize($upload); //must reinitialize to get rid of your bug ( i had it as well)
            if (!$this->upload->do_upload('userfile',$k)) {
                $this->load->view('upload/image_form', $data + array('error'=>$this->upload->display_errors()));
            }
            $udata[$k] = $this->upload->data(); //gradually build up upload->data()
        }

I was able to get multiple file uploads to work with clux's method but I had to modify the upload class slightly (I'm using Codeigniter 2). First I created a duplicate of the CI upload class into my applications library.

Line 143:

public function do_upload($field = 'userfile')

change to

public function do_upload($field = 'userfile', $i = 0)

And between lines 160 and 200, you must add [$i] to the end of the $_FILES variables.

Example:

is_uploaded_file($_FILES[$field]['tmp_name'])

change to:

is_uploaded_file($_FILES[$field]['tmp_name'][$i])

I believe there is a total of 9 of them.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!