In questo post vediamo come effettuare l’upload di un file con Laravel.

Sono necessarie due rotte:
La prima porta alla vista contenente il form mentre la seconda riceve ed elabora il file inviato tramite il form stesso.

È necessario poi creare una vista che contiene l’interfaccia per inserire il file.

Se non sappiamo come impostare una rotta o un form con lavarel possiamo d’are un’occhiata alla guida: Laravel 4

Prima rotta

La prima rotta corrisponde all’indirizzo /carica-immagine e serve a richiamare la vista upload.blade.php.

Route::get('carica-immagine', function()
{
	return View::make( 'upload' );
});

Il form

Creaiamo la vista che ospiterà il form per l’upload.
upload-blade-laravel-carica-immagine

Nel codice seguente possiamo notare:
1) il metodo Form::open()  apre il tag html e definisce alcuni attributi del tag stesso:

  • 'url' => 'upload'
    imposta l’action (è la rotta di destinazione)
  • 'files' => 'true'
    predispone il form alla ricezione di file (enctype =”multipart/form-data”)
  • 'method' => 'post'
    metodo di invio dei dati. Post è il valore di default, non c’era bisogno di esplicitarlo.

2) Il metodo Form::file() crea l’input per l’upload.

3) Il metodo Form::submit() crea il pulsante per l’invio del file.

<div class="row riga-campo">
  {{Form::open( array( 'url' => 'upload', 'files' => 'true', 'method' => 'post'))}}

  {{ Form::label( 'immagine', 'Carica immagine', array('id'=>'', 'class'=>'')) }}
  {{ Form::file( 'immagine' ) }} //sorgente: <input name="immagine" type="file" id="immagine">

  {{ Form::submit('Salva immagine', array('class' => 'button tiny')) }}
</div>

Seconda rotta

La seconda rotta  risponde all’url /upload e riceverà i dati inviati dal form.

Da notare che il metodo utilizzato è Route::post() e non Route::get().

Per accedere alle informazioni del file inviato utilizziamo il metodo Input::file();

Route::post('upload', function()
{
	$img = Input::file( 'immagine' );
        print_r( $img );
});

Il risultato del print_r sull’oggetto $img è il seguente

/*
Symfony\Component\HttpFoundation\File\UploadedFile Object
(
    [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
    [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => DSCF3624.JPG
    [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
    [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 94526
    [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
    [pathName:SplFileInfo:private] => /Applications/MAMP/tmp/php/phprd5OZS
    [fileName:SplFileInfo:private] => phprd5OZS
)

*/

 

Altri metodi utili per ricavare informazioni sui file caricati.

getFilename();

Accedere al nome del file provvisorio.

Input::file( 'immagine' )->getFilename();

getClientOriginalName()

Il nome del file nel momento in cui viene caricato.

Input::file( 'immagine' )->getClientOriginalName();

getClientSize()

Dimensione del file in byte.

Input::file( 'immagine' )->getClientSize();

getClientMimeType()

Ricavare il tipo di file caricato, se un immagine, un pdf ecc…

Input::file( 'immagine' )->getClientMimeType();

getRealPath();

Posizione corrente del file

Input::file( 'immagine' )->getRealPath();

Salvare il file: metodo move()

Serve per spostare il file dalla posizione provvisoria a una nuova cartella.

Il primo parametro è la  posizione definitiva dove dovrà essere salvato il file, mentre con il secondo decidiamo il nome del file  (nell’esempio facciamo in modo che abbia lo stesso nome del file caricato).

Input::file( 'immagine' )->move(__DIR__.'/uploads/', Input::file( 'immagine' )->getClientOriginalName());

Manipolare i file immagine

Spesso prima di salvare definitivamente il file nel filesystem è necessario effettuare qualche operazione. Se stiamo lavorando con le immagini  ad esempio possiamo effetture dei crop, creare dei cloni in modo da avere più versioni della stessa immagine a diverse dimensioni oppure ridurre la qualità e quindi il peso. Per questo tipo di manipolazioni possiamo utilizzare una libreria esterna come intervention image.


  inStileWeb.com
blog comments powered by Disqus