October CMS 提供了强大的文件系统抽象得益于 Laravel 和出色的 Flysystem PHP 包。Flysystem 集成提供了易于使用的驱动程序用于处理本地文件系统和 Amazon S3。更棒的是,在这些存储选项之间切换非常简单,因为每个系统的 API 都保持不变。
文件系统配置文件位于 config/filesystems.php。在此文件中您可以配置您所有的“磁盘”。每个磁盘代表着一个特定的存储驱动器和存储位置。针对每个支持的驱动器的示例配置都包含在配置文件中。因此, 只需修改该配置以反映您的存储偏好和凭据。
当然,你可以配置任意数量的磁盘,甚至可以拥有多个使用相同驱动程序的磁盘。
当使用 local 驱动时,请注意所有文件操作都相对于您的配置文件中定义的 root 目录。默认情况下,此值设置为 storage/app 目录。因此,以下方法会将文件存储在 storage/app/file.txt 中:
Storage::disk('local')->put('file.txt', 'Contents');在使用 S3 驱动程序之前,您需要通过 Composer 包管理器安装 Flysystem S3 软件包。
composer require league/flysystem-aws-s3-v3 "^3.0"S3 驱动程序的配置信息 位于 您的 config/filesystems.php 配置文件. 此文件 包含 一个 适用于 S3 驱动程序的 示例配置数组. 您 可以 随意修改 此数组 以使用 您自己的 S3 配置 和 凭据.
Storage 门面可用于与您任何配置的磁盘进行交互。 例如,您可以使用该门面上的 put 方法将头像存储到默认磁盘。 如果您在不首先调用 disk 方法的情况下在 Storage 门面上调用方法,则该方法调用将自动传递给默认磁盘:
$user = User::find($id);
Storage::put(
'avatars/'.$user->id,
file_get_contents(Request::file('avatar')->getRealPath())
);当使用多个磁盘时,你可以使用 Storage facade 上的 disk 方法访问特定磁盘。当然,你可以继续链式调用方法来在该磁盘上执行操作:
$disk = Storage::disk('s3');
$contents = Storage::disk('local')->get('file.jpg')get 方法可用于获取指定文件的内容。该方法将返回文件的原始字符串内容:
$contents = Storage::get('file.jpg');此 exists 方法可用于判断给定文件在磁盘上是否存在:
$exists = Storage::disk('s3')->exists('file.jpg');该size方法可用于获取文件的大小(以字节为单位):
$size = Storage::size('file1.jpg');该 lastModified 方法返回文件上次修改的 UNIX 时间戳:
$time = Storage::lastModified('file1.jpg');put 方法可用于将文件存储到磁盘。您也可以将 PHP resource 传递给 put 方法,它将利用 Flysystem 底层的流支持。在处理大文件时,强烈建议使用流:
Storage::put('file.jpg', $contents);
Storage::put('file.jpg', $resource);该 copy 方法可用于将现有文件复制到磁盘上的新位置:
Storage::copy('old/file1.jpg', 'new/file1.jpg');该 move 方法可用于将现有文件移动到新位置:
Storage::move('old/file1.jpg', 'new/file1.jpg');prepend 和 append 方法允许你轻松地在文件开头或结尾插入内容:
Storage::prepend('file.log', 'Prepended Text');
Storage::append('file.log', 'Appended Text');该 delete 方法接受单个文件名或一个文件数组,以从磁盘中删除:
Storage::delete('file.jpg');
Storage::delete(['file1.jpg', 'file2.jpg']);files 方法返回给定目录中所有文件的数组。如果你想检索给定目录(包括所有子目录)中所有文件的列表,可以使用 allFiles 方法:
$files = Storage::files($directory);
$files = Storage::allFiles($directory);directories 方法返回给定目录中所有目录的数组. 此外, 您可以使用 allDirectories 方法获取给定目录及其所有子目录中的所有目录列表:
$directories = Storage::directories($directory);
// Recursive...
$directories = Storage::allDirectories($directory);该 makeDirectory 方法将创建给定的目录,包括任何所需的子目录:
Storage::makeDirectory($directory);最后,deleteDirectory 可用于删除一个目录,包括它所有的文件,从磁盘中:
Storage::deleteDirectory($directory);