Upload mehrerer Dateien in Laravel 4
Hier mein controller-code für das hochladen von mehreren Dateien und ich bin die übergabe der Schlüssel und der Wert von 'Briefträger' - rest-API-client für Google Chrome. Ich bin hinzufügen von mehreren Dateien vom Postboten, aber nur 1 Datei ist immer hochladen.
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);
}
}
}
}
}
Ich habe versucht, diesen code auch, aber es gibt mich Speicherort einer Datei im temporären Ordner
$file = Input::file('file');
echo count($file);
und
echo count($_FILES['file']);
gibt mir immer 5.Kann mir jemand sagen warum?
... und warum foreach(Input::file('file') as $key => $abc)
gibt den Fehler ungültige Argumente
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht mit jedem API, aber das kann Gliederung das Prinzip.
Ich dies einrichten routes.php Datei, whick wird Ihnen helfen, mit upload-test.
routes.php
Beachten Sie die input-Namen, Dateien[]: Wenn das hochladen mehrerer Dateien unter dem gleichen Namen, gehören Klammern als gut.
Lösung:
Können Sie alle Dateien, indem Sie einfach tun:
Erklärung:
Klasse
Input
ist eigentlich eine Fassade für dieIlluminate\Http\Request
Klasse (ja, genau wie dieRequest
Fassade - beide dienen als "Gesicht" für die gleiche Klasse!**).Das bedeutet, dass Sie können alle Methoden, die Sie Verlangen .
Wenn wir auf der Suche nach der Funktion
file()
, wir sehen, es funktioniert wie folgt:Nun
retrieveItem()
ist eine geschützte Methode, so können wir nicht nur rufen Sie es von unseren Controller direkt. Suchen tiefer, erkennen wir jedoch, dass wir können übergeben Sie diefile()
- Methode "null" für den Schlüssel. Wenn wir das tun, dann bekommen wir alle die Elemente!So, wenn wir rufen
Input::file()
, die Anfrage-Klasse wird intern laufen$this->retrieveItem('files', null, null)
was wiederum führenreturn $this->files->all();
und wir bekommen alle Dateien hochgeladen.** Beachten Sie, dass
Input
Fassade hat die zusätzliche Methode get() in Ihr vorhanden.den oben genannten Lösungen nicht funktionieren, mit mehreren Dateien, wie die Rückkehr ausgelöst wird, sobald das erste Element wird validiert ,also hier ist eine Lösung nach einigen Stunden der Kopf-Wand-hämmern. inspiriert von https://www.youtube.com/watch?v=PNtuds0l8bA
u im Grunde speichern Sie die Dateinamen in ein array und übergeben diese arrays in einer session dann nur hinzufügen
return
wenn die Schleife beendet ist.1. Form :-
Formular öffnen-tag haben muss, 'files'=>true-und Datei-Feld muss den Namen [](array) und 'multiple'=>true
2. Fügen Sie folgenden code zu Ihrer controller-Funktion :-
QUELLE : http://tutsnare.com/upload-multiple-files-in-laravel/
EDIT: Reference source link nicht funktioniert.