2017-10-19 11 views
0

Laravelのブログフォームを編集したいと思います。 Title, Bodyのような他のすべてのテキスト情報は正常に編集されます。しかし、Imageは更新できませんでした。新しい画像はアップロードされず、画像パスはC:\xampp\tmp\php2030.tmpと設定されています。編集フォームの画像を更新するLaravel

My Controller for edit。

public function update(Request $request, $id) 
{ 
    $requestData = $request->all(); 

    $post = Post::findOrFail($id); 
    $post->update($requestData); 
    if ($request->hasFile('image')) 
    { 
     $file = $request->file('image'); 
     $fileNameExt = $request->file('image')->getClientOriginalName(); 
     $fileNameForm = str_replace(' ', '_', $fileNameExt); 
     $fileName = pathinfo($fileNameForm, PATHINFO_FILENAME); 
     $fileExt = $request->file('image')->getClientOriginalExtension(); 
     $fileNameToStore = $fileName.'_'.time().'.'.$fileExt; 
     $pathToStore = public_path('media'); 
     Image::make($file)->resize(600, 531)->save($pathToStore . DIRECTORY_SEPARATOR. $fileNameToStore); 
     $image = '/images/'.$fileNameToStore; 
     $post->save();     
     } 
    session()->flash('message', 'Successfully updated the post'); 
    return redirect('/'); 
} 

何が問題なのですか?

答えて

0

してください、以下のコードを使用します。私は店のメソッドのために行ったように私は、Updateメソッドを更新し、それはまだCのような画像のパスを保存し

public function update(Request $request, $id) 
{ 
    $requestData = $request->all(); 
    $post = Post::findOrFail($id); 

    $pathToStore = public_path('media'); 

    if ($request->hasFile('image')) 
    { 
     $file = $request->file('image'); 
     $rules = array('file' => 'required|mimes:png,gif,jpeg'); // 'required|mimes:png,gif,jpeg,txt,pdf,doc' 
     $validator = \Illuminate\Support\Facades\Validator::make(array('file'=> $file), $rules); 

     if($validator->passes()) 
     { 
      $filename = $file->getClientOriginalName(); 
      $extension = $file -> getClientOriginalExtension(); 
      $picture = sha1($filename . time()) . '.' . $extension; 
      $upload_success = $file->move($pathToStore, $picture); 

      if($upload_success) 
      { 
       //if success, create thumb 
       $image = Image::make(sprintf($pathToStore.'/%s', $picture))->resize(600, 531)->save($pathToStore.'/thumb/'.$picture); 
      } 
     } 

     $requestData['image'] = "$pathToStore/{$picture}"; 

    } 

    $post->update($requestData); 
    session()->flash('message', 'Successfully updated the post'); 
    return redirect('/'); 
} 
0

PHPはファイルアップロードを受け取ると、デフォルトでは取得中のように一時ディレクトリに書き込み、リクエストの処理後にファイルを自動的に削除します。

あなたがする必要があるのは、アップロードされたファイルを安全な場所に移動することです。 Laravel 5.5のファイルアップロードには、store methodがあります。

public function update(Request $request, $id) 
{ 
    $requestData = $request->all(); 
    $post = Post::findOrFail($id); 

    if ($request->hasFile('image')) { 
     $file = $request->file('image'); 
     $fileNameExt = $request->file('image')->getClientOriginalName(); 
     $fileNameForm = str_replace(' ', '_', $fileNameExt); 
     $fileName = pathinfo($fileNameForm, PATHINFO_FILENAME); 
     $fileExt = $request->file('image')->getClientOriginalExtension(); 
     $fileNameToStore = $fileName.'_'.time().'.'.$fileExt; 
     $pathToStore = public_path('media'); 
     Image::make($file)->resize(600, 531)->save($pathToStore . DIRECTORY_SEPARATOR. $fileNameToStore); 

     // UPDATE TEMPORARY IMAGE PATH WITH ACTUAL PATH 
     $requestData['image'] = "/media/{$fileNameToStore}"; 
    } 

    $post->update($requestData); 
    session()->flash('message', 'Successfully updated the post'); 
    return redirect('/'); 
} 
+0

を:\ xamppの\ TMP \ php2030.tmpや画像ディレクトリにもアップロードされません。 – universal

+0

一時パスをDBに保存しています。私はコードサンプルを私の答えに付け加えて、どのように動作するかを大まかに考えました。基本的に '$ requestData'を新しいイメージパスで更新しています。お役に立てれば! – Tudor