2017-10-19 4 views
0

Je veux éditer le formulaire de blog dans Laravel. Toutes les autres informations textuelles telles que Title, Body ont été modifiées avec succès. Mais Image n'a pas pu être mis à jour. La nouvelle image n'est pas téléchargée et le chemin de l'image est C:\xampp\tmp\php2030.tmp.Mettre à jour l'image depuis le formulaire d'édition Laravel

Mon contrôleur pour l'édition.

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

Qu'est-ce qui ne va pas?

Répondre

0

S'il vous plaît, utilisez le code ci-dessous:

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

Lorsque PHP reçoit un téléchargement de fichier, il l'écrit par défaut dans un répertoire temporaire comme vous obtenez, et supprime automatiquement le fichier une fois la demande traitée.

Ce que vous devez faire est de déplacer le fichier téléchargé vers un emplacement sûr. Laravel 5.5 a un store method pour les téléchargements de fichiers qui pourraient être d'intérêt.

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 mis à jour la méthode de mise à jour comme je l'ai fait pour la méthode du magasin, mais il permet d'économiser encore chemin de l'image comme C: \ xampp \ tmp \ php2030.tmp et de l'image n'est pas non plus téléchargé dans le répertoire. – universal

+0

Vous continuez à enregistrer le chemin temporaire vers la base de données. J'ai attaché un échantillon de code à ma réponse pour vous donner une idée approximative de la façon dont cela devrait fonctionner, je suis en train de mettre '$ requestData' à jour avec le nouveau chemin de l'image. J'espère que cela t'aides! – Tudor