2013-04-14 25 views
7

Ich versuche, einige Fotos hochzuladen und dies mit den Laravel-Funktionen zu bearbeiten. Aber ich kann nicht für das Leben von mir herausfinden, wie man das richtig macht. Ich konnte tatsächlich etwas hochladen, aber ich habe ein paar Probleme bekommen. Dies ist der Code Ich habe jetzt:Laravel 4 Datei hochladen

Wenn bei der Dokumentation sieht, und fand diese Funktion: $file = Input::file('photo'); ich diese Funktion benutzt habe, und was der Inhalt von $file wird eine Instanz von Symfony\Component\HttpFoundation\File\UploadedFile, die, wie die Dokumentation teilt uns mit, "erweitert die PHP SplFileInfo-Klasse und bietet eine Vielzahl von Methoden zur Interaktion mit der Datei." http://laravel.com/docs/4.2/requests#files

Dann habe ich diese Funktion Input::file('photo')->move($destinationPath); verwendet, die aber die Datei im gewünschten Ordner auf dem Server sollte. Und es tat es. Aber jetzt kommt das Problem. Jetzt haben alle hochgeladenen Dateien einen Dateinamen wie phpgoJnLc und ohne eine Erweiterung.

von SplFileInfo und versuchte getExtension an den Funktionen schaute ich habe zur Verfügung, die mir einen leeren String und getFilename geben, die mir auch wie phpgoJnLc etwas gibt.

Dann sah ich mich um im Internet und fand ein paar Teil des Codes von Laravel 3, wo sie so etwas wie dies tat:

$filename = Str::random(20) .'.'. File::extension(Input::file('photo.name'));

Aber das Ergebnis davon ist, geben Sie mir nur das Ergebnis aus Str::random(20) gefolgt von einem Punkt. Auch hier keine Dateiendung.

Also, was mache ich falsch? Wie lade ich eine Datei mit Laravel 4 hoch?

Antwort

17

Suchen in derselben Klasse Datei Ich sehe eine getClientOriginalName() Funktion ...

$file = Input::file('photo'); 
$file->move($destinationPath,$file->getClientOriginalName()); 

... die ais ssuming Sie wollen den ursprünglichen Namen, um Ihre Client setzt ... die gefährlich sein könnte , machen Sie ein paar Sicherheitskontrollen, wäre mein Ratschlag. Das Abrufen des Erweiterungsnamens erfolgt nur mit ->getClientOriginalExtension(), so dass Sie auch nur diesen Teil & vor dem zweiten Argument der move()-Funktion eine zufällige Zeichenfolge hinzufügen können.

+0

Sie, mein Freund, haben gerade meinen Tag gerettet! Wie habe ich das nicht gesehen ...? Vielen Dank! – Crinsane

0

Sie auch einen Namen für die Datei mit der ursprünglichen Dateierweiterung wie so erzeugen:

$filename = Str::random(20) . '.' . Input::file('image')->guessExtension(); 

wenn Sie versuchen, in Laravel folgenden verwenden 4:

$filename = Str::random(20) .'.'. File::extension(Input::file('photo.name')); 

Sie erhalten diese Fehler:

'Call to undefined method Illuminate\Filesystem\Filesystem::guessExtension()' 
1

Dies funktionierte für mich, vor allem, wenn Sie den Namen des Uplo ändern möchten aded image:

$filename = 'New_Name'.'.'.Input::file('photo')->getClientOriginalExtension(); 
+0

@ pathors.thank Sie. – iCoders