отсоединить изображение, только если оно существует в laravel - PullRequest
2 голосов
/ 09 июля 2020

При обновлении изображения пользователя отключите изображение от папки publi c, если она существует, в противном случае обновите изображение пользователя. В настоящее время у меня нет изображения для пользователя. И при обновлении пользователя из раздела профиля я получаю эту ошибку unlink ('images / users') - это каталог . Я хочу, если изображение существует для пользователя, затем отключите изображение и загрузите новое, иначе просто загрузите новое изображение.

Мой контроллер:

public function changeUserImage(Request $request)
    {
        $this->validate($request, [
            'image' => 'required|mimes:jpeg,jpg,png|max:10000',
        ]);
        $image = $request->file('image');
        if (isset($image)) {
            $imageName = time() . '.' . $request->image->getClientOriginalExtension();
            if (!file_exists('images/users')) {
                mkdir('images/users', 0777, true);
            }
            if (file_exists('images/users')){
                unlink('images/users/' . \auth()->user()->image);
                $image->move('images/users', $imageName);
                User::find(\auth()->user()->id)->update(['image'=>$imageName]);
            }else if (!file_exists('images/users')){
                $image->move('images/users', $imageName);
                User::find(\auth()->user()->id)->update(['image'=>$imageName]);
            }
        }
        return redirect()->back();
    }

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Попробуйте это. Я еще не тестировал. Дайте мне знать, если у вас возникнут вопросы.

Убедитесь, что вы импортировали файл: use File;

ОБНОВЛЕНО

public function changeUserImage(Request $request)
{
    $this->validate($request, [
        'image' => 'required|mimes:jpeg,jpg,png|max:10000',
    ]);
    // Let get the current image
    $user = Auth::user();
    $currentImage = $user->image;
    // Let compare the current Image with the new Image if are not the same
    $image = $request->file('image');
    // The Image is required which means it will be set, so we don't need to che isset($image)
    if ($image != $currentImage) {
      // To make our code cleaner let define a directory for DRY code
        $filePath = public_path('images/users/');
        $imageName = time() . '.' . $request->image->getClientOriginalExtension();
        if (!File::isDirectory($filePath)){
            File::makeDirectory($filePath, 0777, true, true);
        }
        $image->move($filePath, $imageName);
        // After the Image has been updated then we can delete the old Image if exists
        if (file_exists($filePath.$currentImage)){
            @unlink($filePath.$currentImage);
        }
    } else {
      $imageName = $currentImage;
    }
    //  SAVE CHANGES TO THE DATA BASE
    $user->image = $imageName;
    $user->save();
    
    return redirect()->back();
}
0 голосов
/ 09 июля 2020

Чтобы сохранить изображение: $request->image->storeAs('images/users/', $file_name);

Чтобы удалить изображение: Storage::delete('images/users/'. $file_name);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...