Upload multiple files in Laravel 4
file, laravel, php, upload
Solution
Solution:
You can get all files by simply doing:
$allFiles = Input::file();
Explanation:
The class `Input` is actually a Facade for the `Illuminate\Http\Request` class (Yes, just like the `Request` facade - they both serve as the "Face" for the same class!**).
That means you can use any methods available in Request .
If we search for the function `file()`, we see it works like this:
public function file($key = null, $default = null)
{
return $this->retrieveItem('files', $key, $default);
}
Now, `retrieveItem()` is a protected method, so we can't just call it from our Controller directly. Looking deeper, however, we see that we can pass the `file()` method "null" for the key. If we do so, then we'll get all the items!
protected function retrieveItem($source, $key, $default)
{
if (is_null($key))
{
return $this->$source->all();
}
else
{
return $this->$source->get($key, $default, true);
}
}
So, if we call `Input::file()`, the Request class will internally run `$this->retrieveItem('files', null, null)` which will in turn run `return $this->files->all();` and we will get all the files uploaded.
** Note that `Input` Facade has the extra method get() available in it.
Problem
Here is my controller code for uploading multiple files and I am passing key and value from 'postman' rest API client on Google Chrome. I am adding multiple files from postman but only 1 file is getting upload. ``` public function post_files() { $allowedExts = array("gif", "jpeg", "jpg", "png","txt","pdf","doc","rtf","docx","xls","xlsx"); foreach($_FILES['file'] as $key => $abc) { $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); $filename= $temp[0]; $destinationPath = 'upload/'.$filename.'.'.$extension; if(in_array($extension, $allowedExts)&&($_FILES["file"]["size"] < 20000000)) { if($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; } if (file_exists($destinationPath)) { echo $filename." already exists. "; } else { $uploadSuccess=move_uploaded_file($_FILES["file"]["tmp_name"],$destinationPath); if( $uploadSuccess ) { $document_details=Response::json(Author::insert_document_details_Call($filename,$destinationPath)); return $document_details; // or do a redirect with some message that file was uploaded // return Redirect::to('authors') } else { return Response::json('error', 400); } } } } } ``` I have tried this code also but it returns me location of a file in temporary folder ``` $file = Input::file('file'); echo count($file); ``` and `echo count($_FILES['file']);` returns me always 5.Can anyone tell me why? and why `foreach(Input::file('file') as $key => $abc)` gives the error invalid arguments