Laravel 有很棒的檔案系統抽象層,是基於 Frank de Jonge 的 Flysystem 套件。 Laravel 整合的 Flysystem 提供了簡單的介面,可以操作本地端空間、 Amazon S3 、 Rackspace Cloud Storage 。更好的是,它可以非常簡單的切換不同儲存方式,但仍使用相同的 API 操作!
檔案系統的設定檔放在 config/filesystems.php
。在這個檔案內你可以設定所有的「硬碟」。每個硬碟代表一種儲存方式和地點。預設的設定檔內已經包含了所有儲存方式的範例。所以只要修改儲存設定和認證即可!
在使用 S3 或 Rackspace 之前,你必須先用 Composer 安裝相對應的套件:
league/flysystem-aws-s3-v2 ~1.0
league/flysystem-rackspace ~1.0
當然,你可以加入任意數量的硬碟設定檔,甚至設定多個硬碟都使用同一種儲存方式。
使用本地端空間時,要注意所有的操作路徑都是相對於設定檔裡 local
的 root
,預設的路徑是 storage/app
。因此下列的操作將會儲存一個檔案在 storage/app/file.txt
:
Storage::disk('local')->put('file.txt', 'Contents');
可以用 Storage
facade 操作所有寫在設定檔裡的硬碟。或者是,你也可以將 Illuminate\Contracts\Filesystem\Factory
型別暗示寫到任何類別裡,經由 IoC container 解析。
$disk = Storage::disk('s3');
$disk = Storage::disk('local');
$exists = Storage::disk('s3')->exists('file.jpg');
if (Storage::exists('file.jpg'))
{
//
}
$contents = Storage::get('file.jpg');
Storage::put('file.jpg', $contents);
Storage::prepend('file.log', 'Prepended Text');
Storage::append('file.log', 'Appended Text');
Storage::delete('file.jpg');
Storage::delete(['file1.jpg', 'file2.jpg']);
Storage::copy('old/file1.jpg', 'new/file1.jpg');
Storage::move('old/file1.jpg', 'new/file1.jpg');
$size = Storage::size('file1.jpg');
$time = Storage::lastModified('file1.jpg');
$files = Storage::files($directory);
// Recursive...
$files = Storage::allFiles($directory);
$directories = Storage::directories($directory);
// Recursive...
$directories = Storage::allDirectories($directory);
Storage::makeDirectory($directory);
Storage::deleteDirectory($directory);