Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uploading multiple files userfile[] array?

I am trying to upload multiple images and I have a jquery plugin set up so I can browse for multiple files and select them.

The only problem I am having is accessing the file array in my controller, does anyone know how I can do this? Thanks.

view:

<input type="file" name="userfile[]" id="userfile" class="multi" />
like image 640
green_arrow Avatar asked Mar 30 '12 13:03

green_arrow


1 Answers

I had this same issue on a project last year, after a bit of searching I found a perfect function.

I take no credit it for it, but cannot remmeber where I found it so if anyone knows please link back to the author.

Make sure the form has the files named like this

<input type="file" name="userfile"/>
<input type="file" name="userfile2" />
<input type="file" name="userfile3" /> ..etc

Or

 <input type="file" name="userfile[]" />

The function..

function multiple_upload($upload_dir = 'uploads', $config = array())
{
    $files = array();

    if(empty($config))
    {
        $config['upload_path'] = '../path/to/file';
        $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png';
        $config['max_size']      = '800000000';
    }

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

        $errors = FALSE;

        foreach($_FILES as $key => $value)
        {            
            if( ! empty($value['name']))
            {
                if( ! $this->upload->do_upload($key))
                {                                           
                    $data['upload_message'] = $this->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file
                    $this->load->vars($data);

                    $errors = TRUE;
                }
                else
                {
                    // Build a file array from all uploaded files
                    $files[] = $this->upload->data();
                }
            }
        }

        // There was errors, we have to delete the uploaded files
        if($errors)
        {                    
            foreach($files as $key => $file)
            {
                @unlink($file['full_path']);    
            }                    
        }
        elseif(empty($files) AND empty($data['upload_message']))
        {
            $this->lang->load('upload');
            $data['upload_message'] = ERR_OPEN.$this->lang->line('upload_no_file_selected').ERR_CLOSE;
            $this->load->vars($data);
        }
        else
        {
            return $files;
        }
    } 

Now it's been a while since I've used it so if you need any extra help setting it up just let me know.

like image 85
ojjwood Avatar answered Oct 27 '22 10:10

ojjwood