Ошибка загрузки файла изображения на общем хостинге в приложении laravel

Когда я загружаю файл (изображение профиля пользователя), мой код отлично работает на локальном компьютере (Windows). Файл загружается в uploads\profile\avatar\ папку.

Но потом я развернул свой проект на виртуальном хостинге (Linux). Теперь загрузка моего файла не удалась. Вместо перемещения загруженного файла в папку uploads\profile\avatar\ новая папка с именем uploads\profile\avatar\ создается внутри каталога public_html (на том же уровне, что и каталог uploads).

ИЗМЕНИТЬ

Ниже приведены строки, которые перемещают загруженные файлы:

avatar_directory = 'uploads\profile\avatar\\'; $avatar_image = $request->{'profile-avatar'}; $avatar_new_name = 'profile'.$user->id.'_'.date('Y-m-d_H-i-s', time()).'_'.$avatar_image->getClientOriginalName();

Как мне об этом позаботиться?

Спасибо,


person Yeasir Arafat Majumder    schedule 08.09.2017    source источник


Ответы (2)


Чтобы создать относительный путь на один уровень выше, используйте ../

../uploads/profile/avatar/

../ поставит вас на 1 уровень выше общедоступного, то есть корневого веб-сайта (я полагаю)

убедитесь, что файл uploads / profile / avatar / существует и доступен для записи

person online Thomas    schedule 08.09.2017
comment
Разве это не будет искать папку uploads на том же уровне, что и public_html? тогда как моя папка с загрузками находится внутри public_html. Вместо перемещения загруженного файла в эту папку laravel создает другую папку с именем uploads\profile\avatar. Я имею в виду, что имя вновь созданной папки включает обратную косую черту. Я добавил к исходному вопросу строки, которые выполняют переименование и перемещение. Пожалуйста, проверьте отредактированный вопрос. Этот код отлично работает на локальной машине! - person Yeasir Arafat Majumder; 08.09.2017

Ну, я нашел проблему.

Дело в том, что моим локальным сервером разработки был Windows, а общим хостингом был Linux. В моем коде я использовал синтаксис, похожий на окна, для определения каталога назначения:

$avatar_directory = 'uploads\profile\avatar\\';

Linux не смог найти этот каталог из-за обратной косой черты. Итак, я изменил все обратные косые черты на прямые, и это исправило:

$avatar_directory = 'uploads/profile/avatar/';

Надеюсь, это кому-то поможет

person Yeasir Arafat Majumder    schedule 09.09.2017
comment
Чтобы не зависеть от ОС с таким кодом, используйте вместо него DIRECTORY_SEPARATOR PHP. I.E. $avatar_directory = 'uploads' . DIRECTORY_SEPARATOR . 'profile' . DIRECTORY_SEPARATOR . 'avatar' . DIRECTORY_SEPARATOR; - person Tpojka; 10.09.2017