2017-10-19 126 views
0

我想編輯Laravel中的博客表單。所有其他文本信息,如Title, Body已成功編輯。但無法更新Image。新圖像未上傳,圖像路徑設置爲C:\xampp\tmp\php2030.tmp從編輯表單更新圖片Laravel

我的編輯控制器。

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

請使用下面的代碼:

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

我更新的更新方法,像我一樣的存儲方法,但它仍然保存圖像路徑爲C:\ XAMPP \ tmp目錄\ php2030.tmp和圖像也沒有上傳到目錄。 – universal

+0

您仍然保存到數據庫的臨時路徑。我附上了一個代碼示例到我的答案給你一個粗略的想法應該如何工作,基本上我正在更新'$ requestData'與新的圖像路徑。希望這可以幫助! – Tudor