2017-10-19 1 views
0

Ich möchte das Blog-Formular in Laravel bearbeiten. Alle anderen Textinformationen wie Title, Body werden erfolgreich bearbeitet. Aber Image konnte nicht aktualisiert werden. Ein neues Bild wurde nicht hochgeladen und der Bildpfad wurde auf C:\xampp\tmp\php2030.tmp eingestellt.Bild aus Bearbeitungsformular aktualisieren Laravel

Mein Controller zum Bearbeiten.

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

Was ist daran falsch?

Antwort

0

Bitte verwenden Sie den Code unten:

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

Wenn PHP einen Dateiupload erhält, schreibt es standardmäßig in ein temporäres Verzeichnis, wie Sie es erhalten, und löscht die Datei automatisch, nachdem die Anfrage bearbeitet wurde.

Sie müssen die hochgeladene Datei an einen sicheren Ort verschieben. Laravel 5.5 hat eine store method für Datei-Uploads, die von Interesse sein könnten.

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

I Update-Methode aktualisiert, wie ich für den Shop-Methode tat, aber es spart Standbild als Pfad C: \ xampp \ tmp \ php2030.tmp und Bild wird auch nicht in das Verzeichnis hochgeladen. – universal

+0

Sie speichern immer noch den temporären Pfad zur DB. Ich fügte ein Code-Sample an meine Antwort an, um Ihnen eine grobe Vorstellung davon zu geben, wie es funktionieren sollte. Im Grunde aktualisiere ich '$ requestData' mit dem neuen Image-Pfad. Hoffe das hilft! – Tudor

Verwandte Themen