Storage :: get()导致FileNotFoundException

时间:2018-03-16 14:57:16

标签: php json laravel

我正在尝试将外部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()方法如何返回trueStorage::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'),
        ],

    ],

];

2 个答案:

答案 0 :(得分:1)

为什么要使用Storage类呢?该类专门用于访问存储文件夹或外部文件服务器。您将文件存储在控制器/代码旁边,因此以旧式方式执行操作可能更容易。

$location = __DIR__.'/config.json';

if (File::exists($location)) {
    $string = file_get_contents($location);
    $json = json_decode($string, true);

    // logic
} else {
    // Do something
}

答案 1 :(得分:1)

您可以尝试通过

文件外观访问它
File::get($location);

错误可能是因为Storage试图从其默认路径(./project/storage/app)以及您发送的文件中访问该文件。我最好的建议是添加一个新磁盘 像这样

// config/filesystems.php

'customDrive' => [
   'driver' => 'local',
   'root' => base_path(), // here put your full path
],

并通过

访问它
Storage::disk("customDrive")->get("config.json");

来源 https://laravel.com/docs/5.6/filesystem