Laden Sie mehrere Dateien in Laravel hoch 4

8

Hier ist mein Controller-Code zum Hochladen mehrerer Dateien und ich gebe Schlüssel und Wert vom 'postman' Rest API-Client an Google Chrome weiter. Ich füge mehrere Dateien vom Postboten hinzu, aber nur 1 Datei wird hochgeladen.

%Vor%

Ich habe diesen Code auch ausprobiert, aber er gibt mir den Speicherort einer Datei im temporären Ordner zurück

%Vor%

und  %Code% gibt mir immer 5. Kann jemand mir sagen warum?

und warum echo count($_FILES['file']); dem Fehler ungültige Argumente gibt

    
richa 13.08.2013, 08:59
quelle

4 Antworten

22

Keine API verwenden, aber dies könnte das Prinzip umschreiben.

Ich habe diese Datei routes.php eingerichtet, die Ihnen beim Hochladen hilft.

routes.php

%Vor%

Beachten Sie den eingegebenen Namen, Dateien []: Wenn Sie mehrere Dateien unter demselben Namen hochladen, fügen Sie auch Klammern hinzu.

    
Andreyco 13.08.2013 14:06
quelle
21

Lösung:

Sie können alle Dateien erhalten, indem Sie einfach:

%Vor%

Erklärung:

Die Klasse Input ist eigentlich eine Fassade für die Illuminate\Http\Request Klasse (Ja, genau wie die Request Fassade - sie beide dienen als "Gesicht" für die gleiche Klasse! **).

Das bedeutet, dass Sie alle in Request verfügbaren Methoden verwenden können.

Wenn wir nach der Funktion file() suchen Wir sehen es so:

%Vor%

Nun ist retrieveItem() eine geschützte Methode, daher können wir sie nicht einfach direkt von unserem Controller aus aufrufen. Wenn wir genauer hinschauen, sehen wir, dass wir die Methode file() weitergeben können "null" für den Schlüssel. Wenn wir das tun, bekommen wir alle Gegenstände!

%Vor%

Also, wenn wir Input::file() aufrufen, führt die Request-Klasse intern $this->retrieveItem('files', null, null) aus, was wiederum return $this->files->all(); ausführt und wir werden alle hochgeladenen Dateien erhalten.

** Beachten Sie, dass Input Facade die zusätzliche Methode get () ist darin verfügbar.

    
fideloper 13.08.2013 13:56
quelle
3

Die obigen Lösungen funktionieren nicht mit mehreren Dateien, da die Rückgabe ausgelöst wird, sobald das erste Objekt validiert wird. Hier ist also eine Lösung nach mehreren Stunden Kopfwandschlagen. inspiriert von Ссылка

%Vor%

Im Grunde speichern Sie die Dateinamen in einem Array und übergeben diese Arrays an eine Sitzung, fügen Sie dann nur return hinzu, wenn die Schleife beendet ist.

    
ctf0 13.02.2015 15:05
quelle
1

1. Formular: - Das Tag zum Öffnen des Formulars muss 'files' = & gt; true haben und das Dateifeld muss den Namen [] (mit Array) und 'multiple' = & gt; true

haben %Vor%

2. Fügen Sie Ihrer Controller-Funktion den folgenden Code hinzu: -

%Vor%

QUELLE: Ссылка

BEARBEITEN: Referenzquellenlink funktioniert nicht .

    
Vishal Tarkar 12.02.2015 08:12
quelle

Tags und Links