Как удалить / сохранить из URL для общедоступных изображений в моем проекте Laravel? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь добиться удаления / хранилища из URL-адреса, чтобы в итоге это www.example.com/images/x.jpg, а не значение по умолчанию www.example.com/storage/x.jpg.

Я попытался удалить / хранилище изurl в config/filesystems.php примерно так:

// Original

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL') . '/storage',
        'visibility' => 'public',
 ],

// Modified

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL'), // <-- changed
        'visibility' => 'public',
 ],

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

Можно ли достичь того, чего я пытаюсь достичь?

1 Ответ

0 голосов
/ 02 февраля 2019

Лучший способ добиться этого - добавить новый диск images.Таким образом, новый шаблон URL можно применять выборочно, и он не будет мешать существующему коду.

Шаг 1

Добавьте диск в config / filesystems.php :

'images' => [
        'driver' => 'local',
        'root' => storage_path('app/public/images'),
        'url' => env('APP_URL') . '/images',
        'visibility' => 'public',
 ],

Вот как вы сохраняете загруженные файлы на свой новый диск:

$request->file('image')->storeAs(/* path */ '/', /* filename */ 'x.jpg', /* disk */ 'images')

И так вы создаете ссылки наизображение, которое выглядит как http://example.com/images/x.jpg:

Storage::disk('images')->url('x.jpg')

Шаг 2

Теперь, когда вы можете создавать ссылки на эти изображения, вы должны убедиться, что ваш сервер может их найти.У вас есть несколько вариантов для этого.

Опция 1

Создайте символическую ссылку в вашем общедоступном каталоге, как работает диск по умолчанию public Laravel (/storage).

$ ln -s /var/www/example.com/storage/app/public/images /var/www/example.com/public/images

Опция 2

Создайте маршрут в приложении Laravel для обслуживания изображений.

Route::get('images/{file}', function ($file) {
    return Storage::disk('images')->response($file);
    // return Storage::disk('images')->download($file);
});

Опция 3

Создайте правило перезаписи на своем веб-сервере.

В nginx это может выглядеть так:

location /images/ {
    root /var/www/example.com/storage/app/public/;
}

В Apache вы можете использовать псевдоним :

Alias "/images" "/var/www/example.com/storage/app/public/images"
...