In my CodeIgniter project I'm uploading files during the project creation. Here's the uploading function:
function uploadFiles(){
$this->load->library('upload');
$error = 0;
$projectName = $_POST['projectname'];
mkdir('./uploads/'.$projectName);
for($i=0; $i<count($_FILES); $i++)
{
$_FILES['userfile']['name'] = $_FILES['files']['name'][$i];
$_FILES['userfile']['type'] = $_FILES['files']['type'][$i];
$_FILES['userfile']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
$_FILES['userfile']['error'] = $_FILES['files']['error'][$i];
$_FILES['userfile']['size'] = $_FILES['files']['size'][$i];
$config['upload_path'] = './uploads/'.$projectName;
$config['allowed_types'] = 'xml|etl';
$config['max_size'] = '0';
$config['overwrite'] = TRUE;
$this->upload->initialize($config);
if($this->upload->do_upload())
{
$error += 0;
}else{
$error += 1;
}
}
if($error > 0){ return FALSE; }else{ return TRUE; }
}
And I call this function in the create_project function like this:
public function create_project() {
$this->load->library('form_validation');
$this->form_validation->set_rules('projectname', 'Project name', 'required');
$this->form_validation->set_message('required', 'This is an obligatory field');
if($this->form_validation->run() == FALSE) {
$this->load->view('project_creation_view');
} else {
$this->load->model('Project_management_model');
$this->Project_management_model->create_project();
$this->uploadFiles();
}
}
However this does not do anything. The files are not being uploaded. Even an empty directory is not being created. Could anybody help me to find the error?
Thanks.
After defining configuration for upload library we have load upload library and then after we have initialize upload library. Then after we have fetch single file property from multiple files and upload one by one to specified destination by using Codeigniter Upload library function do_upload().
You can Upload any number of Files..
$config['upload_path'] = 'upload/Main_category_product/';
$path=$config['upload_path'];
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '1024';
$config['max_width'] = '1920';
$config['max_height'] = '1280';
$this->load->library('upload', $config);
foreach ($_FILES as $fieldname => $fileObject) //fieldname is the form field name
{
if (!empty($fileObject['name']))
{
$this->upload->initialize($config);
if (!$this->upload->do_upload($fieldname))
{
$errors = $this->upload->display_errors();
flashMsg($errors);
}
else
{
// Code After Files Upload Success GOES HERE
}
}
}
This is an extension of the CI_Upload class that I modified to upload multiple files, just copy this to the MY_Upload.php file. It also makes the directory as well.
http://pastebin.com/g9J6RxW1
Then all you need to do in the controller function is arrange your files into the an array, where the name of the field and the key are the array keys and the config is the data. In you case something like this:
$project_files['files'][0] = array(
'upload_path' => './uploads/'.$projectName.'/',
'max_size' => 0,
'allowed_types' => 'xml|etl',
'overwrite' => TRUE,
'remove_spaces' => TRUE,
);
$project_files['files'][1] = array(
'upload_path' => './uploads/'.$projectName.'/',
'max_size' => 0,
'allowed_types' => 'xml|etl',
'overwrite' => TRUE,
'remove_spaces' => TRUE,
);
IF all the files configs are the same just make a for loop to set this up, it will also take 'named keys', ie. $project_files['files']['file_key']
.
then just call:
if($this->upload->upload_files($project_files)){/*all files uploaded successfully*/}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With