2013-09-27 5 views
22

私は他の情報のなかで、ユーザーが画像をアップロードするフォームを持っています。データベースへの画像のパスを保存し、その画像をサーバのpublic/img/フォルダに保存します。Laravel 4 - ファイルアップロード

{{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}を使用してフォームを開いて、POSTファイルを開くことができるようにしました。私はfolowingているHTMLの検査:

<form method="POST" action="http://mypizza/pizzas" 
    accept-charset="UTF-8" enctype="multipart/form-data"> 

を私は自分のコントローラに投稿し、期待通りのフォームからすべてのデータを受信することができます。次のようにファイルを扱う方法は次のとおりです。私は、ファイルを選択し、フォームを送信すると

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 { ...}ブロックの後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" } 

私が間違って何をしているのですか?

+3

$destinationPath="resources/assets/images/";

又は

などのように、データベースに' PATH'を調整することが必要であろう'=>' img/'。 $ filename]); ' –

+0

そうです、これを忘れました。 – Reflic

答えて

33

$ destination_pathが間違っています。あなたはこのようなあなたの変数$先での公開/ディレクトリへのパスを含める必要があります:

$destinationPath = public_path().'/img/';

3

あなたは、PHP 5.4を使用しているように見えるので、あなたもStaplerを使用して検討するかもしれません。今は非常に安定しており(すぐにベータ版から外れる予定です)、今書きたい定型文の多くからあなたを救うでしょう。 @Reflicによって与えられた答えは私のために右BR ...ないかもしれませんが、

1
$destinationPath= public_path() . 'img/'; 

....
このパスは私のために働きました。
URLから "public /"を削除した可能性があります... ありがとうございます。

1

私は同じ問題がありました。私は、ファイルの拡張子を持って私のフォルダ

$destinationPath= public_path() . '/img/'; // Worked perfect 

私も

私のファイル名に変更するためにこれをやったの先頭に追加していないた

public_path() 

以外の私のコードに関するすべての権利を得ました

$extension = Input::file('YourFileName')->getClientOriginalExtension(); 
$filename = WhateverYouWantHere . '.' . $extension; 

これは、ファイル名が変更されたことです。 Laravelは本当に素晴らしいです

1

あなたも相対パスを書くことができます。` 'パスを次のよう [Reflic]からの応答に加えて$destinationPath= 'public/img/';