他の情報の中でもユーザーが画像をアップロードするフォームがあります。データベースへの画像へのパスを保存し、サーバー上の_public/img/
_フォルダーに画像を保存します。
フォームは、次を使用して開かれました:{{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}
so POSTファイル。HTMLの検査次のものがあります。
_<form method="POST" action="http://mypizza/pizzas"
accept-charset="UTF-8" enctype="multipart/form-data">
_
コントローラーに対してPOSTを実行し、フォームからすべてのデータを受け取ることができます。ファイルを処理する方法は次のとおりです。
_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
}
_
ファイルを選択してフォームを送信すると、すべてが機能しているように見えますが、_/img
_フォルダーにはファイルが保存されていません。データベースは、ファイルのパスと名前を正しく登録します。
_if { ...}
_ blockの直後にdd($uploadSuccess);
を実行すると、次の結果が得られます。
_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" }
_
私は何を間違えていますか?
$ destination_pathが間違っています。次のように、変数$ destinationに/ publicディレクトリへのパスを含める必要があります。
$destinationPath = public_path().'/img/';
PHP 5.4を使用しているように見えるので、 ステープラー の使用を検討することもできます。現在は非常に安定しており(ベータ版は間もなくリリースされます)、今すぐ記述しなければならない定型文の多くを節約できます。
相対パスも記述できます。のように
$destinationPath="resources/assets/images/";
または
$destinationPath= 'public/img/';
私は同じ問題を抱えていました。私はコードを除いてすべてを正しくしました
public_path()
フォルダーの先頭に追加していませんでした
$destinationPath= public_path() . '/img/'; // Worked perfect
私もファイル名を変更するためにこれをしました
ファイル拡張子を取得しました
$extension = Input::file('YourFileName')->getClientOriginalExtension();
$filename = WhateverYouWantHere . '.' . $extension;
そして、それは、ファイル名が変更されました。 Laravelは本当に素晴らしい
$destinationPath= public_path() . 'img/';
.
.
.