Edvards Krūmiņš
Edvards Krūmiņš

Reputation: 1

Laravel Storage::disk('local')->put creates a file outside the project file

I am running my project with docker. I am using the function

   Storage::disk('local')->put("/algorithms/".$this->algorithm_id."/newfile.csv", $csv_newfile->__toString());

I want to store this file as var/www/html/Laravel/resources/app/algorithms/algorithm_id/newfile But it stores it one directory up from project folder. So My project sits in /var/www/html/Laravel But it creates this file in /var/www/html/algorithms/algorithm_id/newfile I probably have set up the the projects root directory in /var/www/html (?) But I can't find where have I done this. Could someone explain what could be the problem?

Here's my /config/filesystems.php file

<?php

return [

/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/

'default' => env('FILESYSTEM_DRIVER', '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' => env('FILESYSTEM_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.
|
| Supported Drivers: "local", "ftp", "s3", "rackspace"
|
*/

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

Views: 5596

Answers (1)

Alberto Guilherme
Alberto Guilherme

Reputation: 348

I have run in to a problem similar to yours. Here was the solution that worked for me:

Create a new disk to be place inside the directory

'web_site_root' => [
            'driver' =>'local',
            'root' => base_path();
        ]

And you want to remove the first /

The code:

   Storage::disk('web_site_root')->put("algorithms/".$this->algorithm_id."/newfile.csv", $csv_newfile->__toString());

I don't know why, but somehow the first / made the file, in my case, to be save in the root as well.

Upvotes: 1

Related Questions