Juliver Galleto
Juliver Galleto

Reputation: 9047

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

    ],

];

Upvotes: 7

Views: 18631

Answers (4)

gtamborero
gtamborero

Reputation: 3202

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

],

Upvotes: 5

Gautam Patadiya
Gautam Patadiya

Reputation: 1412

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

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

Upvotes: 1

vijaykumar
vijaykumar

Reputation: 4806

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/

Upvotes: 1

Manikanta Siripella
Manikanta Siripella

Reputation: 672

if(File::exists('filePath')){
     dd(var_dump("it did exist"));

}else{
   dd(var_dump("it did not exist"));
}

Please try above code

Upvotes: 0

Related Questions