Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel check if storage exists is not working

I'm trying to check if file already exist in the storage by

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

but it always return a string "it did exist" even though the file is actually deleted or the file did not exist, any ideas, help?

I'm sure there's no problem on my storage location set up as I'm having no problem when uploading a file to the storage,

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

PS: I'm on Laravel 5.0

UPDATE:

here's my filesystems.php from the config folder of my Laravel 5.0

<?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',
        ],

    ],

];
like image 525
Juliver Galleto Avatar asked Jul 14 '16 04:07

Juliver Galleto


3 Answers

I had the same problem on Laravel 5.5 and the solution was to use

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

instead of

Storage::exists($file_name)

On my config/filesystem.php by default I have two types of local disks (local and public) and I wasn't aware of it:

    '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'),
    ],

],
like image 168
gtamborero Avatar answered Oct 09 '22 03:10

gtamborero


I really don't know the reason why it's not working in your case. I tried in my machine it's working fine.

I tried to debug what's inside Storage::exits it uses same return file_exists($path);

It might be the reason

Results of the file_exists() are cached

Try these things

  1. php artisan config:cache
  2. php artisan cache:clear
  3. php artisan view:clear
  4. chmod -R 777 storage/ or chown -R webuser:webuser storage/
like image 39
vijaykumar Avatar answered Oct 09 '22 02:10

vijaykumar


This may can help you. It's working with Laravel5.4:

Storage::exists('dir/'. $filename)
like image 33
Gautam Patadiya Avatar answered Oct 09 '22 01:10

Gautam Patadiya