Home

Awesome

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"
			)
		)