Search code examples
laravelstoragesftp

Laravel Storage SFTP and uploaded files permissions


I'm using Storage:SFTP (league/flysystem-sftp) to upload some files to an external server. Everything goes fine with a small issue: the files are uploaded with a 0644 (-rw-r--r--) permission. I've tried to use 'public' option on the put method as the example from docs, like

Storage::disk('remote-sftp')->put($filename, $contents, 'public');

but if fails returning FALSE and doesn't uploads the file.

If I remove the 'public' parameter, everything goes well but with the wrong permissions for file.

Is there any way to set the uploaded file permissions to something like 0666?


Solution

  • Finally the solution was a combination of Alpy's answer and configuration. Calling setVisibility() went without failure, but keep permissions in 0644. Digging into the FTP/SFTP driver found that the 'public' permission has a pattern that can be assigned in config using 'permPublic' key, so writting in config/filesystems.php the desired octal permission it worked as spected.

      'disks' => [
    
        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],
    
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
    
        'remote-sftp' => [
            'driver' => 'sftp',
            'host' => '222.222.222.222',
            'username' => 'myuser',
            'password' => 'mypassword',
            'visibility' => 'public',
            'permPublic' => 0766, /// <- this one did the trick
    // 'port' => 22,
            'root' => '/home',
    // 'timeout' => 30,
        ],
    
    ],
    

    ];