Загрузить файл в Laravel - неверный путь

Я новичок в Laravel. У меня есть этот код:

if ($request->hasfile('profilePhoto')) {
            $this->validate($request, [
                'profilePhoto' => 'required',
                'profilePhoto.*' => 'mimetypes:image/jpg'
            ]);
            $image = $request->file('profilePhoto');
            $extension = strtolower($image->getClientOriginalExtension());
            $path = 'upload/images/UserImage/';
            $uniqueName = md5($image . time());
            $image->move(public_path($path), $uniqueName . '.' . $extension);
        }

Эта функция загружает файлы в public/upload/images/UserImage/. Мне нужно, чтобы он хранился в storage/app/upload/images/UserImage/ вместо этого

Как я могу переписать свой код?


person trafgs    schedule 06.07.2019    source источник


Ответы (3)


Вы должны использовать функцию storage_path (должна существовать папка «storage/app/upload»):

$image->move(storage_path("app/upload"), $uniqueName . '.' . $extension);
person Giacomo M    schedule 06.07.2019
comment
Спасибо. Когда я открываю URL-адрес в своем браузере: domain.test/storage/file.jpg - у меня ошибка 404. Файл существует в хранилище. У меня есть ларадок, и я делаю символическую ссылку - person trafgs; 06.07.2019
comment
Позвольте мне понять. Теперь это другая проблема? Загрузка работала? - person Giacomo M; 06.07.2019

Обычный способ загрузки в Laravel на storage/app — через драйвер локального диска.

$file = $path . $uniqueName . '.' . $extension;
\Storage::disk('local')->put($file, $request->file('profilePhoto'));

Storage::disk('local') указывает на storage/app/.

person user2094178    schedule 06.07.2019

Поскольку ваша переменная $path уже объявлена ​​​​таким образом $path = 'upload/images/UserImage/'. Таким образом, вместо сохранения данных в public_path вы можете сохранить их в storage_path().

$image->move(storage_path($path), $uniqueName . '.' . $extension);

person ana    schedule 06.07.2019