Загруженный файл отправляется в разные каталоги в Laravel 7

#php #laravel

#php #laravel

Вопрос:

Я разрабатываю загрузку фотографий с использованием Laravel 7. Вот код:

 public function updateProfilePic(Request $request)
{
    $request->validate([
        'photo' => 'file|image|max:2048',
    ]);

    if (auth()->user()->photo != 'storage/default-pfp.png') {
        $old_photo = str_replace('storage/', '', auth()->user()->photo);
        try {
            unlink('storage/' . $old_photo);
        } catch (Exception $t) {
            // does nothing
        }
    }

    $path = $request->file('photo')->store('public/profile-pics');
    $res  = $this->user->where('email', auth()->user()->email)->update([
        'photo' => str_replace('public/', 'storage/', $path),
    ]);

    if ($res) {
        return redirect('painel-default');
    } else {
        return redirect('/');
    }
}
  

Это отлично работает на моем компьютере. Загруженный файл отправляется в хранилище / app / public /profile-pics. Но, когда этот код запускается на компьютере моего коллеги, он отправляется в хранилище / приложение / общедоступный / public /profile-pics. Кроме того, другой мой коллега использовал его, чтобы получить тот же результат, что и у меня на его компьютере. Однако, из ниоткуда, он получает это: хранилище / приложение / общедоступный / public /profile-pics. Мы запускаем разные версии php 7.4.5, 7.4.8 и 7.4.3 соответственно, но, похоже, это не проблема. Кто-нибудь может помочь мне выяснить, почему это происходит?

Комментарии:

1. Вы уже используете фреймворк, чтобы избежать перезаписи множества вещей. Почему бы не использовать все это? laravel.com/docs/7.x/filesystem

2. Я совсем новичок в Laravel. Вы имеете в виду, что я должен использовать этот помощник по ресурсам, чтобы получить каталог файлов?

3. Точно. Используйте конфигурацию и функции фасада хранилища.

4. Что такое $this->user ? Это не ответ на ваш вопрос, однако, похоже, что вы загружаете пользователя из базы данных с $this->user использованием уже загруженного пользователя auth()->user() . Если это так, то вы можете просто сделать auth()->user()->update([...]) .

5. Rwd, это модель пользователя. Я не знал, что смогу сделать это таким образом. Спасибо.