2017-11-17 9 views
0

Ich kann ein Bild hochladen, aber wenn ich versuche, es zu aktualisieren, gibt es keinen Fehler. Der Dateiname ändert sich in der Datenbank zum Namen des neuen Bildes. Und im öffentlichen Ordner bleibt das Bild alt und erscheint nicht neu.Warum nicht das Bild aktualisieren? Laravel 5.4

Ich benutze: Intervention Bild

Was ich nicht verstehen, bitte helfen Sie.

Controller: UploadController

use Illuminate\Http\Request; 

use App\Post; 
use Image; 
use Storage; 
use Faker\Provider\File; 

public function update (Request $request, $id) 
{ 
    //validate 
    $this->validate($request, [ 
     'title' => 'required|max:255', 
     'author' => 'required', 
     'text' => 'required', 
     'desc' => 'required', 
     'image' => 'required', 
    ]); 
    $posts = Post::find($id); 
    $posts->title = $request->input('title'); 
    $posts->author = $request->input('author'); 
    $posts->text = $request->input('text'); 
    $posts->desc = $request->input('desc'); 
    $posts->image = $request->input('image'); 

    //update image 
    if ($request->hasFile('image')) 
    { 
     $image = $request->file('image'); 
     $filename = time() . '.' . $image->getClientOriginalExtension(); 
     $location = public_path('images/'. $filename); 
     Image::make($image)->resize(800, 400)->save($location); 
     $oldFilename = $posts->image; 
     //update db 
     $posts->image = $filename; 
     //delete old image 
     Storage::delete($oldFilename); 
    } 
    $posts->save(); 

    return redirect('/'); 
} 

Ausblick: edit.blade.php

<div class="container"> 
<form method="POST" action="{{ route('goUpdate', [$posts->id]) }}"> 
    {{ csrf_field() }} 
    {!! method_field('patch') !!} 
    @if($posts) 
     <div class="form-group"> 
      <br> 
      <label>title</label> 
      <input name="title" type="text" class="form-control" value="{{ $posts->title }}"> 
     </div> 
     <div class="form-group"> 
      <label>author</label> 
      <input name="author" type="text" class="form-control" value="{{ $posts->author }}"> 
     </div> 
     <div class="form-group"> 
      <label>text</label> 
      <textarea name="text" class="form-control" rows="7">{{ $posts->text }}</textarea> 
     </div> 
     <div class="form-group"> 
      <label>desc</label> 
      <textarea name="desc" class="form-control" rows="5">{{ $posts->desc }}</textarea> 
     </div> 
     <div class="form-group"> 
      <label>image</label> 
      <input type="file" name="image" class="form-control-file" value="" > 
     </div> 
     <div> 
      <input name="submit" type="submit" class="btn btn-primary" value="update"/> 
      <a href="{{ url('/') }}" class="btn btn-primary">back</a> 
     </div> 
    @endif 
</form> 
<br> 

filesystems.php

'disks' => [ 

    'local' => [ 
     'driver' => 'local', 
     'root' => public_path('images/'), 
    ], 

    'public' => [ 
     'driver' => 'local', 
     'root' => storage_path('app/public'), 
     'url' => env('APP_URL').'/storage', 
     'visibility' => 'public', 
    ], 

    's3' => [ 
     'driver' => 's3', 
     'key' => env('AWS_ACCESS_KEY_ID'), 
     'secret' => env('AWS_SECRET_ACCESS_KEY'), 
     'region' => env('AWS_DEFAULT_REGION'), 
     'bucket' => env('AWS_BUCKET'), 
    ], 

Antwort

0

Versuchen Sie, diese

$image = $request->file('image'); 
$filename = time() . '.' . $image->getClientOriginalName(); 
$path = public_path('events/' . $filename); 
Image::make($image->getRealPath())->resize(300, 300)->save($path); 
$event->image = 'events/' . $filename; 

Hoffnung mit diesem können Sie

+0

Immerhin helfen, nur verstehe ich nicht, warum Sie eine Variable $ Ereignis und ein neues Verzeichnis ‚events /‘ müssen –

+0

ja weil ich es in das public/events-Verzeichnis speichere. Haben Sie versucht, 'if ($ request-> hasFile ('image'))'? .. zu entfernen oder vielleicht können Sie den Wert von image zurückgeben. Vielleicht ist der Wert ' null '@ Иван –

+0

Ich habe herausgefunden, was das Problem war. Ich habe nur vergessen, in die Datei zu schreiben View: edit.blade.php im Formular tag: enctype = "multipart/form-data Aber jetzt ein anderes Problem, das alte Bild wird nicht gelöscht. –