【问题标题】:Laravel check if storage exists is not workingLaravel 检查存储是否存在不工作
【发布时间】:2016-07-14 04:04:24
【问题描述】:

我正在尝试检查存储中是否已经存在文件

if(Storage::exists($request->file_name)):
    dd(var_dump("it did exist"));
else:
    dd(var_dump("it did not exist"));
endif

但它总是返回一个字符串“它确实存在”,即使文件被实际删除或文件不存在,任何想法,帮助?

我确定我的存储位置设置没有问题,因为我在将文件上传到存储时没有问题,

Storage::put($file_name, File::get($file));

PS:我在 Laravel 5.0

更新:

这是我的 Laravel 5.0 配置文件夹中的 filesystems.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. A "local" driver, as well as a variety of cloud
    | based drivers are available for your choosing. Just store away!
    |
    | Supported: "local", "s3", "rackspace"
    |
    */

    'default' => 'local',

    /*
    |--------------------------------------------------------------------------
    | Default Cloud Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Many applications store files both locally and in the cloud. For this
    | reason, you may specify a default "cloud" driver here. This driver
    | will be bound as the Cloud disk implementation in the container.
    |
    */

    'cloud' => 's3',

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Here you may configure as many filesystem "disks" as you wish, and you
    | may even configure multiple disks of the same driver. Defaults have
    | been setup for each driver as an example of the required options.
    |
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root'   => storage_path().'/employee_documents/',
        ],

        's3' => [
            'driver' => 's3',
            'key'    => 'your-key',
            'secret' => 'your-secret',
            'region' => 'your-region',
            'bucket' => 'your-bucket',
        ],

        'rackspace' => [
            'driver'    => 'rackspace',
            'username'  => 'your-username',
            'key'       => 'your-key',
            'container' => 'your-container',
            'endpoint'  => 'https://identity.api.rackspacecloud.com/v2.0/',
            'region'    => 'IAD',
        ],

    ],

];

【问题讨论】:

  • 你确定你的默认存储在config filesystems.php中设置正确吗?
  • @vijaykumar:是的,我确定,因为我在将文件上传到存储时没有错误或任何问题(文件上传成功)
  • 我确定。这可能只是路径的问题。只需转储 $request->file_name 。检查路径是否正确
  • @vijaykumar:它给了我“MMPH13-0012[x]3[x]Juliver Galleto Letter of Intent.docx”,这意味着文件名被直接发送给控制器。有什么想法吗?
  • 不知道@Code Demon。但是分享你的 filesytems.php 我会在我的机器上检查一次。

标签: php laravel laravel-5 laravel-filesystem


【解决方案1】:

我在 Laravel 5.5 上遇到了同样的问题,解决方案是使用

Storage::disk('public')->exists($file_name)

而不是

Storage::exists($file_name)

默认情况下,在我的 config/filesystem.php 中,我有两种类型的本地磁盘(本地和公共),但我不知道:

    '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】:

    我真的不知道它在您的情况下不起作用的原因。我在我的机器上试过它工作正常。

    我尝试调试 Storage::exits 内部的内容,它使用相同的 return file_exists($path);

    可能是这个原因

    file_exists() 的结果被缓存

    试试这些东西

    1. php 工匠配置:缓存
    2. php artisan 缓存:清除
    3. php 工匠视图:清除
    4. chmod -R 777 storage/ 或 chown -R webuser:webuser storage/

    【讨论】:

      【解决方案3】:

      这可能会对您有所帮助。它适用于 Laravel5.4:

      Storage::exists('dir/'. $filename)
      

      【讨论】:

        【解决方案4】:
        if(File::exists('filePath')){
             dd(var_dump("it did exist"));
        
        }else{
           dd(var_dump("it did not exist"));
        }
        

        请试试上面的代码

        【讨论】:

        • 我使用的是 Laravel 存储门面而不是文件门面。
        猜你喜欢
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 2014-10-02
        • 2019-03-10
        • 1970-01-01
        • 1970-01-01
        • 2018-05-10
        相关资源
        最近更新 更多