Filesystem / Cloud Storage
Introduction
Lumen provides a wonderful filesystem abstraction thanks to the Flysystem PHP package by Frank de Jonge. The Flysystem integration provides simple to use drivers for working with local filesystems, Amazon S3, and Rackspace Cloud Storage. Even better, it's amazingly simple to switch between these storage options as the API remains the same for each system!
Configuration
The filesystem configuration options are located in your .env
configuration file. You may look at the .env.example
configuration file for an example of using these options.
Before using the S3 or Rackspace drivers, you will need to install the appropriate package via Composer:
- Amazon S3:
league/flysystem-aws-s3-v2 ~1.0
- Rackspace:
league/flysystem-rackspace ~1.0
When using the local
driver, note that all file operations are relative to the storage/app
directory. Therefore, the following method would store a file in storage/app/file.txt
:
Storage::disk('local')->put('file.txt', 'Contents');
Basic Usage
Note: If you intend to use the
Storage
facade, be sure to uncomment the$app->withFacades()
call in yourbootstrap/app.php
file.
The Storage
facade may be used to interact with any of your configured disks. Alternatively, you may type-hint the Illuminate\Contracts\Filesystem\Factory
contract on any class that is resolved via the Laravel service container.
Retrieving A Particular Disk
$disk = Storage::disk('s3');
$disk = Storage::disk('local');
Determining If A File Exists
$exists = Storage::disk('s3')->exists('file.jpg');
Calling Methods On The Default Disk
if (Storage::exists('file.jpg')) {
//
}
Retrieving A File's Contents
$contents = Storage::get('file.jpg');
Setting A File's Contents
Storage::put('file.jpg', $contents);
Prepend To A File
Storage::prepend('file.log', 'Prepended Text');
Append To A File
Storage::append('file.log', 'Appended Text');
Delete A File
Storage::delete('file.jpg');
Storage::delete(['file1.jpg', 'file2.jpg']);
Copy A File To A New Location
Storage::copy('old/file1.jpg', 'new/file1.jpg');
Move A File To A New Location
Storage::move('old/file1.jpg', 'new/file1.jpg');
Get File Size
$size = Storage::size('file1.jpg');
Get The Last Modification Time (UNIX)
$time = Storage::lastModified('file1.jpg');
Get All Files Within A Directory
$files = Storage::files($directory);
// Recursive...
$files = Storage::allFiles($directory);
Get All Directories Within A Directory
$directories = Storage::directories($directory);
// Recursive...
$directories = Storage::allDirectories($directory);
Create A Directory
Storage::makeDirectory($directory);
Delete A Directory
Storage::deleteDirectory($directory);