Я пытаюсь загрузить внешний файл JSON в свое приложение laravel. Ниже вы найдете фрагмент моего кода.
$location = __DIR__.'/config.json';
echo $location; // Results in correct file location
echo File::exists($location); // Return 1
echo Storage::get($location); // Throws a FileNotFound Exception
Как метод File::exists() может возвращать true, а Storage::get() генерировать исключение?
Мой файл config/filesystems.php:
<?php
return [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
],
],
];
Добавил в основной пост






Зачем использовать для этого класс Storage? Этот класс специально предназначен для доступа к папке хранения или внешним файловым серверам. Вы сохранили свой файл рядом с контроллером / кодом, поэтому, вероятно, проще сделать это по старинке.
$location = __DIR__.'/config.json';
if (File::exists($location)) {
$string = file_get_contents($location);
$json = json_decode($string, true);
// logic
} else {
// Do something
}
Без проблем. Взгляните и на ответ Серджио Рейса, он больше Laravel-y, а мой нет;)
Вы можете попробовать получить к нему доступ через файловый фасад,
File::get($location);
Ошибка, вероятно, связана с тем, что хранилище пытается получить доступ к файлу по пути по умолчанию (./project/storage/app), а также к тому, что вы его отправляете. Мой лучший совет - добавить новый диск как это
// config/filesystems.php
'customDrive' => [
'driver' => 'local',
'root' => base_path(), // here put your full path
],
и получить доступ через
Storage::disk("customDrive")->get("config.json");
Можете показать свой файл
config/filesystems.php? (с ключомdisks).