2013-04-14 24 views
7

Sto tentando di caricare alcune foto e gestirle con la build nelle funzioni di Laravel. Ma non posso per la vita di me capire come farlo correttamente. Sono stato in grado di caricare effettivamente qualcosa, ma ho incontrato alcuni problemi. Questo è il codice che ho adesso:Caricamento file Laravel 4

Se guardato la documentazione, e ho trovato questa funzione: $file = Input::file('photo'); ho usato questa funzione, e qual è il contenuto della $file diventa è un esempio di Symfony\Component\HttpFoundation\File\UploadedFile, che, come la documentazione ci dice "estende la classe PHP SplFileInfo e fornisce una varietà di metodi per interagire con il file". http://laravel.com/docs/4.2/requests#files

Quindi ho utilizzato questa funzione Input::file('photo')->move($destinationPath); che dovrebbe essere il file nella cartella desiderata sul server. E lo ha fatto. Ma ora arriva il problema. Ora tutti i file caricati hanno un nome file come phpgoJnLc e senza un'estensione.

Ho guardato le funzioni disponibili da SplFileInfo e ha cercato getExtension che mi danno una stringa vuota e getFilename che mi dà anche qualcosa come phpgoJnLc.

Poi ho guardato in giro su internet e ho trovato un paio parte di codice da laravel 3, dove hanno fatto qualcosa di simile:

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

Ma il risultato di questo è datemi solo il risultato da Str::random(20) seguito da un punto. Di nuovo, nessuna estensione di file.

Quindi, cosa sto sbagliando? Come caricare un file con Laravel 4?

risposta

17

Guardando nello stesso file di classe Vedo una funzione getClientOriginalName() ...

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

... che AIS ssuming si desidera di mantenere il nome originale vostro client imposta ... che potrebbe essere pericoloso , fare alcuni controlli di sicurezza su di esso sarebbe il mio consiglio. Ottenere il nome dell'estensione è fatto solo con ->getClientOriginalExtension(), quindi è possibile salvare solo quella parte & aggiungere una stringa casuale prima di quella nel secondo argomento della funzione move().

+0

Tu, amico mio, hai appena salvato la mia giornata! Come ho fatto a non vederlo ...? Grazie mille! – Crinsane

0

È possibile anche generare un nome per il file con l'estensione del file originale in questo modo:

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

se si tenta di utilizzare il seguente in laravel 4:

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

si otterrà questo errore:

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

Questo ha funzionato per me, soprattutto quando si desidera modificare il nome del uplo immagine ad hoc:

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

@ pathors.thank voi. – iCoders