Laravel File Upload не работает на сервере Godaddy - PullRequest
0 голосов
/ 04 мая 2018

Возникли проблемы с загрузкой файлов в моем проекте laravel. Локально работает, но не работает на сервере godaddy. Я использовал следующий метод для хранения моего файла,

Первый метод:

$image = $request->file('avatar_file');
$imageName = time().'.'.request()->avatar_file>getClientOriginalExtension();
$destinationPath = public_path().'/images/' ;
request()->avatar_file->move($destinationPath, $imageName);

Второй метод:

$image = $request->file('file');
$imageName = time().'.'.request()->file->getClientOriginalExtension();
$request->file('file')->storeAs('documents', $imageName);

Я создал символическую ссылку для этой работы на локальном, а не на сервере.

1 Ответ

0 голосов
/ 04 мая 2018

Поскольку вы разместили свое приложение Laravel на платформе общего хостинга, ваше приложение не знает правильный путь к общему каталогу.

Итак, вам нужно определить функцию в вашем файле public/index.php следующим образом: (вставьте ее поверх файла index.php)

function public_path($path = '')
{
    return realpath(__DIR__)
        .($path ? DIRECTORY_SEPARATOR.$path : $path);
}

Определение этой функции приводит к тому, что вспомогательная функция с тем же именем пропускается, что позволяет переопределить ее функциональность. Это необходимо для использования «нестандартного» местоположения для «публичного» каталога Laravel.

Теперь создайте нового поставщика услуг для вашего пути: php artisan make:PublicPathServiceProvider

В функции register() вам нужен код:

public function register()
    {
        if (env('PUBLIC_PATH') !== null) {
            //An example that demonstrates setting Laravel's public path.
            $this->app['path.public'] = base_path().'/../'.env('PUBLIC_PATH');
        } else {
            $this->app['path.public'] = base_path().'/../public_html';
        }

        // Possible environment changes
        if ($this->app->environment() === 'local') {
        } elseif ($this->app->environment() === 'test') {
        } elseif ($this->app->environment() === 'production') {
        }
    }

Теперь зарегистрируйте этого провайдера в своем приложении. config/app.php

Под Провайдерами добавьте это:

App\Providers\PublicPathServiceProvider::class,

Последний шаг, в вашем файле .env создайте новую переменную: PUBLIC_PATH=/public_html

Тебе хорошо идти !!!

Примечание: Не забудьте проверить путь, куда вы загрузили свое приложение Laravel. (Выше предполагается, что путь равен public_html )

Важно: После изменения конфигурации вам может потребоваться очистить кеш:

php artisan config:cache

php artisan cache:clear

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