Как связать хранилище в хосте?

#php #laravel

#php #laravel

Вопрос:

Я загружаю свой проект на хост. Я загрузил изображение, и изображение сохраняется в базе данных. И изображение не отображалось хорошо, но оно также отображалось на моем локальном хосте.

web.php

 use IlluminateSupportFacadesArtisan;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesRoute;

Auth::routes();

Route::get('/link', function(){
    return Artisan::call('storage:link');
});
 

Контроллер

 public function update(Request $request)
{
    $user = auth()->user();
    $path = $user->image ?? null;
    if ($request->hasFile('image'))
    {
        $file = $request->file('image');
        $nane = time();
        $extension = $file->getClientOriginalExtension();
        $fileName = $nane . '.' . $extension;
        $path = $file->storeAs('images/users', $fileName, 'public');
    }
    $user->image = $path;
}
 

Изображение сохраняется в базе данных.

Изображение загружено в папку storage / app / public / images / users.

Изображение не загружало public / images / users.

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

1. Есть ли у вас символическая ссылка из хранилища / приложения / общедоступной в общедоступную / хранилище? laravel.com/docs/8.x/filesystem#the-public-disk

2. Да, я запустил php artisan storage:link свой локальный хост, затем загрузил

3. Вы должны снова запустить php artisan storage:link на сервере

4. Как? Route::get(‘/link’, function(){ return Artisan::call(‘storage:link’); });

5. У вас нет доступа к терминалу на сервере? Вы должны запустить его через терминал. Если у вас нет доступа к терминалу, вы можете попробовать использовать маршрут, как указано в комментарии выше

Ответ №1:

У вас есть доступ к серверу по ssh? Если нет, вы можете написать так в своем маршруте :

 Route::get('/foo', function () {
    Artisan::call('storage:link');
});
 

Он сгенерирует символическую ссылку на ваш public_html, извините за мой плохой английский