Ho un modulo in cui, tra le altre informazioni, un utente potrebbe caricare un'immagine. Voglio memorizzare il percorso dell'immagine sul database e salvare l'immagine nella cartella public/img/
sul server.Laravel 4 - Caricamento file
Il modulo è stato aperto utilizzando: {{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}
in modo che sarebbe in grado di file POST. Ispezione del codice HTML che ho il folowing:
<form method="POST" action="http://mypizza/pizzas"
accept-charset="UTF-8" enctype="multipart/form-data">
posso pubblicare nel mio Controller e ricevere tutti i dati dal modulo come previsto. La gestione del file metodo è il seguente:
public function store() {
//TODO - Validation
$destinationPath = '';
$filename = '';
if (Input::hasFile('image')) {
$file = Input::file('image');
$destinationPath = '/img/';
$filename = str_random(6) . '_' . $file->getClientOriginalName();
$uploadSuccess = $file->move($destinationPath, $filename);
}
$pizza = Pizza::create(['name' => Input::get('name'),
'price' => Input::get('price'),
'ingredients' => Input::get('ingredients'),
'active' => Input::get('active'),
'path' => $destinationPath . $filename]);
if ($pizza) {
return Redirect::route('pizzas.show', $pizza->id);
}
//TODO - else
}
Quando seleziono un file e inviare il modulo, tutto sembra funzionare, tranne che nessun file viene salvato nella cartella /img
. Il database registra correttamente il percorso e il nome del file.
Esecuzione dd($uploadSuccess);
a destra dopo il blocco if { ...}
, ottengo il seguente:
object(Symfony\Component\HttpFoundation\File\File)#220 (2) {
["pathName":"SplFileInfo":private]=> string(17) "/img\YZmLw7_2.jpg"
["fileName":"SplFileInfo":private]=> string(12) "YZmLw7_2.jpg" }
Che cosa sto facendo di sbagliato?
Oltre alla risposta da [Reflic], sarà necessario regolare la 'path' sul database come segue:' 'percorso '=>' img/'. $ nomefile]); ' –
Proprio così, l'ho dimenticato. – Reflic