Search code examples
phplaravelintervention

Update image from edit form Laravel


I want to edit the the blog form in Laravel. All other text information like Title, Body are successfully edited. But Image could not be updated. New image is not uploaded and image path is set as C:\xampp\tmp\php2030.tmp.

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('/');
}

What is wrong with it?


Solution

  • Please, use the code below:

    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('/');
    }