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'),
],
Immerhin helfen, nur verstehe ich nicht, warum Sie eine Variable $ Ereignis und ein neues Verzeichnis ‚events /‘ müssen –
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 '@ Иван –
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. –