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 门面上的 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);