Файловое хранилище
Laravel предоставляет мощную абстракцию для работы с файловой системой благодаря php-пакету Flysystem от Франка де Жонге. Настройки файловой системы находятся в файле config/filesystems.php
. В нём можно настроить так называемые диски
. Каждый диск представляет собой определенный драйвер и место хранения. В конфигурационном файле имеются примеры для каждого поддерживаемого драйвера.
config/filesystems.phpreturn [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],
];
Функция storage_path()
возвращает полный путь к директории storage
. Также можно использовать функцию storage_path()
для получения полного пути к указанному файлу относительно директории хранилища:
// вернет полный путь /var/www/server.com/storage
$path = storage_path();
// вернет /var/www/server.com/storage/app/file.txt
$path = storage_path('app/file.txt');
Функция public_path()
возвращает полный путь к директории public
, которая является корнем веб-сервера и доступна из веб. Также можно использовать функцию public_path()
для получения полного пути к указанному файлу или директории:
// вернет полный путь /var/www/server.com/public
$path = public_path();
// вернет /var/www/server.com/public/index.php
$path = public_path('index.php');
Сразу после установки Laravel доступны диски local
и public
, использующие драйвер local
.
- Для диска
local
место хранения — директорияstorage/app
- Для диска
public
место хранения — директорияstorage/app/public
Диск local
является диском по умолчанию.
Чтобы сделать файлы диска public
доступными через веб, надо создать символьную ссылку из public/storage
на storage/app/public
. Директория public
проекта Laravel — является корневой директорией сервера, поэтому файл storage/app/public/image.jpg
будет доступен через веб как http://название_сайта.ru/storage/image.jpg
.
php artisan storage:link
Какие символьные ссылки создавать, задается в файле конфигурации config/filesystems.php
в разделе links
:
config/filesystems.phpreturn [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],
];
Когда файл сохранён на диске и создана символьная ссылка, можно создать URL к файлу с помощью хелпера asset()
или метода url()
фасада Storage
.
<img src="{{ asset('storage/images/image.jpg') }}" alt="" />
<img src="{{ Storage::disk('public')->('images/image.jpg') }}" alt="" />