Multiple file upload support for CodeIgniter 2.x.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
MY_Upload.php
README.md

README.md

CodeIgniter Multi-Upload

Extends native CodeIgniter Upload library to support multiple file uploading. Multiple upload functionality will fallback to CodeIgniters native upload if non-multiple upload is detected.

Installation

Simply copy the MY_Upload.php file to your applications library directory.

Configuration

Multiple upload functionality will fallback to CodeIgniters default do_upload() method so configuration is backwards compatible between do_upload() and the new do_multi_upload() method provided by this extension. However, if supplying new names for multiple uploaded items, you must configure them as an array for the file_name configuration option. Names will be processed in the same order as the $_FILES array is read, meaning the first file uploaded will be renamed to the first name supplied in the file_name configuration array and so-on. If the uploaded file count exceeds the configured file_name configuration array, those exceeding files will default to their given upload name.

//HTML
	<form>
		<input type="file" name="files[]" multiple />
		<input type="submit" name="submit" value="submit" />
	</form>
	
//PHP
	//Configure upload.
	$this->upload->initialize(array(
		"file_name"		=> array("file_1.ext", "file_2.ext", "file_3.ext"),
		"upload_path"	=> "/path/to/upload/to/"
	));
	
	//Perform upload.
	if($this->upload->do_multi_upload("files")) {
		//Code to run upon successful upload.
	}

do_multi_upload($field)

The do_multi_upload() method is referenced in the same way as CodeIgniters do_upload() method but expects $field to reference a multiple file $_FILES array. If multiple files are not detected, do_multi_upload will fallback to CodeIgniters do_upload() method.

//Using multiple inputs.
	//HTML
		<form>
			<input type="file" name="files[]" />
			<input type="file" name="files[]" />
			<input type="file" name="files[]" />
			<input type="submit" name="submit" value="submit" />
		</form>
	
	//PHP
		//Configure upload.
		$this->upload->initialize(array(
			"upload_path"	=> "/path/to/upload/to/"
		));
	
		//Perform upload.
		if($this->upload->do_multi_upload("files")) {
			//Code to run upon successful upload.
		}
		
//Using HTML5 "multiple" attribute.
	//HTML
		<form>
			<input type="file" name="files[]" multiple />
			<input type="submit" name="submit" value="submit" />
		</form>
	
	//PHP
		//Configure upload.
		$this->upload->initialize(array(
			"upload_path"	=> "/path/to/upload/to/"
		));
	
		//Perform upload.
		if($this->upload->do_multi_upload("files")) {
			//Code to run upon successful upload.
		}		

get_multi_upload_data()

The extended library also comes with a get_multi_upload_data() method that will return data about each uploaded file as a multi-dimensional array.

		//Perform upload.
		if($this->upload->do_multi_upload("files")) {
			//Print data for all uploaded files.
			print_r($this->upload->get_multi_upload_data());
		}
		
		//Possible output given files "file_1.jpg", "file_2.jpg" and "file_3.jpg" without renaming.
		Array(
			[0] => Array(
				[file_name] => file_1.jpg
				[file_type] => image/jpeg
				[file_path] => /path/to/file/
				[full_path] => /path/to/file/file_1.jpg
				[raw_name] => file_1
				[orig_name] => file_1.jpg
				[client_name] => file_1.jpg
				[file_ext] => .jpg
				[file_size] => 2182.91
				[is_image] => 1
				[image_width] => 1024
				[image_height] => 768
				[image_type] => jpeg
				[image_size_str] => width="1024" height="768"
			)
			
			[1] => Array(
				[file_name] => file_2.jpg
				[file_type] => image/jpeg
				[file_path] => /path/to/file/
				[full_path] => /path/to/file/file_2.jpg
				[raw_name] => file_2
				[orig_name] => file_2.jpg
				[client_name] => file_2.jpg
				[file_ext] => .jpg
				[file_size] => 67.58
				[is_image] => 1
				[image_width] => 1024
				[image_height] => 768
				[image_type] => jpeg
				[image_size_str] => width="1024" height="768"
			)
			
			[2] => Array(
				[file_name] => file_3.jpg
				[file_type] => image/jpeg
				[file_path] => /path/to/file/
				[full_path] => /path/to/file/file_3.jpg
				[raw_name] => file_3
				[orig_name] => file_3.jpg
				[client_name] => file_3.jpg
				[file_ext] => .jpg
				[file_size] => 517.97
				[is_image] => 1
				[image_width] => 1024
				[image_height] => 768
				[image_type] => jpeg
				[image_size_str] => width="1024" height="768"
			)
		)