Работа с файлами laravel, как скрыть storage?

248
07 апреля 2022, 00:30

Подскажите пожалуйста как правильно использовать файловую систему laravel. На примере изображений, мне их нужно сохранять в /storage/images/.../image.jpg На фронте нужно получить адрес к картинке - http://localhost/images/avatars/image.jpg Но по файкту я могу получить только такой вариант http://localhost/storage/images/avatars/image.jpg Вот мои конфиги по дискам:

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

Если попытаться получить через asset то получаю 404
{{ asset('images/avatars/image.jpg') }} Если через класс Storage::url() то получается, но урл не правильный.

Что мне нужно сделать чтобы получить нужный урл и при этом хранить файлы не в папке public/images, а в storage/app/public/images ?

И второй вопрос, как закрыть прямой доступ через GET запрос к каталогу storage? При запросе адреса http://localhost/storage или http://localhost/storage/app и др., получить 404 ошибку со стандартным шаблоном ?

Answer 1
  1. Делаете симлинк(ярлык) storage/app/public -> public/storage/

    php artisan storage:link

  2. Простешая запись ваших файлов через POST (image - это имя input поля для файла) -

    $my_image = $request->file('image')->store('images','public');

либо с оригинальным именем $image_name( сами задаете вместе с раширением )

$my_image =  $request->file('image')->storeAs('images',$image_name,'public');

store('images','public') - тут первое это папка куда положится файл, а второе драйвер, которые используется для сохранинея этого файла(по дефолту он сохранит в storage/app/public). Т.е. файл будет лежать в storage/app/public/images/. Название файла будет сгенерировано автоматически.

  1. Достать изображение из хранилища(например, в blade - шаблоне )

    {{ asset('storage/'.$my_image) }}

ПС. Ваш собственный драйвер не верен

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

Путь куда все это будет сохраняться "имя_вашего_проекта_"/images/app/public/images .

READ ALSO
Почему не импортируется gsap?

Почему не импортируется gsap?

Я установил gsap через npm:

76
Почему выдает Unexpected token? Javascript

Почему выдает Unexpected token? Javascript

Консоль выдает Uncaught SyntaxError: Unexpected token '{' на счет 14 строкиПочему?

199
Автономно работающий на хостинге .php

Автономно работающий на хостинге .php

Есть хостинг regru, есть сайт(пока не залит), суть в том, что есть

84
Как отправить параметр URL на сервер?

Как отправить параметр URL на сервер?

В URL есть параметр "clickid": https://domaincom/index

166