2017-10-19 113 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